main(){int i;int a[10];int *p=a;for(i=0;i<10:i++) { *p=i+1;printf("a[%d]=%d\n",i,*p);p++; }} *p=i+1; 我理解是把i+1赋值给数组a,但不能理解作用是什么。想问这一语句大家怎么理解?作用和含义是什么?
6 回答
凌小天3635910
TA贡献17条经验 获得超13个赞
main() { int i; //创建控制变量i int a[10]; //创建整形数组a,大小为10 int *p=a; //创建整形指针p,并将数组a的首地址赋值给p for(i=0;i<10;i++) //建立一个循环,次数为10次 { *p=i+1; //向p所在的地址赋值,值的大小为i+1 printf("a[%d]=%d\n",i,*p); //输出数组标号和对应值 p++; //让p指向下一个地址 } } //整个过程就是对数组a赋值1~10;。
输出结果为:
a[0]=1;
a[1]=2;
a[2]=3;
a[3]=4;
a[4]=5;
a[5]=6;
a[6]=7;
a[7]=8;
a[8]=9;
a[9]=10;
wooviet
TA贡献6条经验 获得超5个赞
最后的结果也就是a[0]=1,a[1]=2……
这里p是一个指向数组首地址的指针,所以*p=i+1的意思就是a[0]=i+1,要知道a就代表的是数组的首地址,也就是说数组名就是数组首地址,由于数组在内存中的空间是连续的,所以,p++就代表p这个指针依次指向数组的下一个元素,也就是说这个程序用p这个指针依次指向数组每一个元素,然后每个元素都被依次赋值为i+1。
这样说请问你听懂了吗?
Yexiaomo
TA贡献152条经验 获得超157个赞
因为 int *p = a ; // 等价于 int *p = &a[0];
// p 指向 数组 a[10] 的 首地址 也就是 a , 也就是 a[0] 的地址
*p = i +1 ; //等价于 a[0] = i +1; ( * 号的意义 应该知道吧)
p++; //因为数组的地址是连续的, 所以 p++ 使 p 指向了 数组下一个元素的地址;也就是 a[1];
以此类推
- 6 回答
- 0 关注
- 2097 浏览
添加回答
举报
0/150
提交
取消