Dotcpp  >  编程教程  >  C语言指针  >  C语言数组与指针的区别与联系

C语言数组与指针的区别与联系

点击打开在线编译器,边学边练

前面我们已经知道,通过数组下标可以确定数组元素在数组中的顺序存储地址。由于每个数组元素相当于一个变量,因此指针变量可以指向数组中的元素,也就是说可以用指针方式访问数组中的元素。


对一个指向数组元素的指针变量的定义和赋值方法,与指针变量相同,例如:

int a[10]; /*定义a为包含10个整型数据的数组*/
int *p; /*定义p为指向整型变量的指针*/
p=&a[0]; /*把a[0]元素的地址赋给指针变量p*/


C语言规定,数组名代表数组的首地址,也就是第0号元素的地址。因此:

p=a; /*等价于p=&a[0];*/
int *p=a; /*等价于int *p=&a[0];*/


对于指向首地址的指针p,p+i(或a+i)就是数组元素a[i]的地址,*(p+i)( 或*(a+i) )就是a[i]的值。

如果指针变量p已指向数组中的某一个元素,则p+1指向同一数组中的下一个元素。


引入指针变量后,就可以用以下两种方法来访问数组元素
(1)下标法,即用a[i]形式访问数组元素,在前面介绍数组时都是采用这种方法。
(2)指针法,即采用*(a+i)或*(p+i)形式,用间接访问的方法来访问数组元素,其中a是数组名,p是指向数组的指针变量,其初值p=a。


#include<stdio.h>
int main()
{
        int i;
        int a[10]={1,2,3,4,5,6,7,8,9,0};
        int *p=a;
        for(i=0;i<10;i++)
        {
                printf("P Value:%d   a Value :%d\n",*(p++),*(a+i));
        }
        printf("\n");
        return 0;
}


注意输出的两种方式,指针可以通过++或--并修改自身值的方式移动,然而数组名本身值不可以被更改。

请您亲自上机运行,并分析。



本文固定URL:https://www.dotcpp.com/course/35

C语言教程
第一章 C语言的过去与未来
第二章 C语言快速入门
第三章 C语言的数据类型
第四章 C语言中的基本输入输出
第五章 C语言运算符和表达式
第六章 C语句和程序流
第七章 C语言函数
第八章 C语言数组
第九章 C语言指针
第十章 C语言结构体和共用体
第十一章 C语言文件操作
第十二章 C语言预处理
第十三章 C语言位运算
第十四章 附录
Dotcpp在线编译      (登录可减少运行等待时间)