利用指针完成对数组的遍历
#include<stdio.h> main() { int *p,i;//定义一个指针p,定义一个整形i int shuzu[38]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,
19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37};//定义一个数组shuzu[38](大小为本人学号34+4),并设定数组内元素为从0至37 p=shuzu;//让指针p指向数组开头的地址 for(i=0;i<38;i++)//定义一个for循环,让整形i从数组的开头的标号增加至结尾的标号来完成对数组的遍历 printf("a[%d]=%d\n",i,*(p+i)); //a[i]为当前数组的编号,p增加i即增加i个数组元素的大小来指向数组[i]的地址,每输出一个数组元素就换行 }
程序编译运行成功,并成功完成对数组元素的遍历
总结:
1.
p=shuzu;//让指针p指向数组开头的地址
数组名shuzu能指向该数组的首地址,它是&数组[0]的化简形式,是指针表达式,由于在作用域内这个值是不变的,所以叫做指针常量,是指针表达式的最基本形式,在数据传递时数组名代表a[0]的地址。而在使用数组元素的数组名(a[0],a[1]...)时需要通过加上&(&a[0],&a[1]...)来取地址。
2.
for(i=0;i<38;i++) printf("a[%d]=%d\n",i,*(p+i));
在开头int shuzu[38]即在内存中开拓了大小为38*sizeof(int)的内存空间,每一个数组元素的大小为sizeof(int)即4个字节,因此在for循环中指针p每+1,即在地址上+4,因此可以指向相邻的下一个数组元素。
3.在做这一作业总结时,对我所定义的数组的数组名shuzu的类型产生了一定的疑问,一开始我直接认为shuzu就是一个指针,但在查询资料中发现了一个截然不同的说法即“数组名永远不等于指针”,然后了解到指针作为一个变量,存储着另一个量的地址,在内存中被分配了空间拥有自己的地址,而数组名却没有,它直接代表数组首地址,因此不可能作为一个指针存在,后来发现是自己搞混了指针和指针变量的概念,指针应该是一种类型的概念,而不能直接与指针变量和常量指针混为一谈,数组名是作为一种指针表达式存在,因为值不变所以是一种常量指针。