C语言指针与数组名
2015-04-05 20:41
155 查看
http://c.biancheng.net/cpp/html/492.html
很显然,它是显示 a 数组的各元素值。我们还可以这样访问元素,如下:
它的结果和作用完全一样。
很显然,它也是显示 a 数组的各元素值。另外与数组名一样也可如下:
看
可以看出,这段代码也是将数组各元素值输出。不过,你把循环体{}中的pa改成a试试。你会发现程序编译出错,不能成功。看来指针和数组名还是不同的。其实上面的指针是指针变量,而数组名只是一个指针常量。这个代码与上面的代码不同的是,指针pa在整个循环中,其值是不断递增的,即指针值被修改了。数组名是指针常量,其值是不能修改的,因此不能类似这样操作:
前面4、5节中pa[i],*(pa+i)处,指针pa的值是使终没有改变。所以变量指针pa与数组名a可以互换。
这时候的代码能成功编译吗?不能。因为pa指针被定义为常量指针了。这时与数组名a已经没有不同。这更说明了数组名就是常量指针。但是……
一、通过数组名访问数组元素
看下面代码:int i, a[] = {3,4,5,6,7,3,7,4,4,6}; for (i = 0; i <= 9; i++) { printf("%d\n", a[i]); }
很显然,它是显示 a 数组的各元素值。我们还可以这样访问元素,如下:
int i, a[] = {3,4,5,6,7,3,7,4,4,6}; for (i = 0; i <= 9; i++) { printf("%d\n", *(a+i)); }
它的结果和作用完全一样。
二、通过指针访问数组元素
int i, *pa, a[] = {3,4,5,6,7,3,7,4,4,6}; pa = a; /*请注意数组名a直接赋值给指针pa*/ for (i = 0; i <= 9; i++) { printf("%d\n", pa[i]); }
很显然,它也是显示 a 数组的各元素值。另外与数组名一样也可如下:
int i, *pa, a[] = {3,4,5,6,7,3,7,4,4,6}; pa = a; for (i = 0; i <= 9; i++) { printf("%d\n", *(pa+i)); }
看
pa = a,即数组名赋值给指针,以及通过数组名、指针对元素的访问形式看,它们并没有什么区别,从这里可以看出:数组名其实也就是指针。难道它们没有任何区别?有,请继续。
三、数组名与指针变量的区别
请看下面的代码:int i, *pa, a[] = {3,4,5,6,7,3,7,4,4,6}; pa = a; for (i = 0; i <= 9; i++) { printf("%d\n", *pa); pa++; /*注意这里,指针值被修改*/ }
可以看出,这段代码也是将数组各元素值输出。不过,你把循环体{}中的pa改成a试试。你会发现程序编译出错,不能成功。看来指针和数组名还是不同的。其实上面的指针是指针变量,而数组名只是一个指针常量。这个代码与上面的代码不同的是,指针pa在整个循环中,其值是不断递增的,即指针值被修改了。数组名是指针常量,其值是不能修改的,因此不能类似这样操作:
a++。
前面4、5节中pa[i],*(pa+i)处,指针pa的值是使终没有改变。所以变量指针pa与数组名a可以互换。
四、声明指针常量
再请看下面的代码:int i, a[] = {3,4,5,6,7,3,7,4,4,6}; int *const pa = a; /* 注意const的位置:不是const int *pa */ for (i = 0; i <= 9; i++) { printf("%d\n", *pa); pa++ ; /*注意这里,指针值被修改*/ }
这时候的代码能成功编译吗?不能。因为pa指针被定义为常量指针了。这时与数组名a已经没有不同。这更说明了数组名就是常量指针。但是……
int *const a = {3,4,5,6,7,3,7,4,4,6}; /*不行*/ int a[]={3,4,5,6,7,3,7,4,4,6}; /*可以,所以初始化数组时必定要这样。*/
相关文章推荐
- C语言之指针、数组和函数
- C语言多维数组指针的技巧
- C语言专题――数组与指针
- C语言之指针、数组和函数
- C语言中指针和数组名小趣
- 浅谈C语言中数组和指针的互操作
- C语言之指针、数组和函数
- C语言之指针、数组和函数
- C语言中字符数组和字符串指针分析
- C语言之指针、数组和函数
- 再谈C语言中数组和指针之间的互操作
- C语言中的指针,数组,指针数组, 数组形式参数
- 水滴石穿C语言之指针、数组和函数(转载)
- 水滴石穿C语言之指针、数组和函数
- c语言学习零碎整理(7):数组名是指针吗?(补)
- C语言的指针和数组
- (C语言)数组与指针的使用
- C语言中字符数组和字符串指针分析
- 水滴石穿C语言之指针、数组和函数
- C语言数组和指针的剖析