.
初始化数据
int array[3] = {1,2,3};
int *parray;
parray = array; //或者parray = &array[0];
1.普通遍历数组的访问:
printf(“第一个元素的地址:%p\n”,parray++);
printf(“第二个元素的地址:%p\n”,parray++);
printf(“第三个元素的地址:%p\n”,parray);
2.通过for循环遍历数组的访问
parray = &array[0]; 此时的意思是让指针偏移回到首地址,因为上面的普通访问已经把地址偏移到了最后一位,继续遍历偏移的话,会超出范围,导致乱码
for(i=0;i<3;i++){
printf(" %d ",*parray);
parray++;
}
或者
parray = &array[0];
for(i=0;i<3;i++){
printf(" %d ",parray[i]); parray[i] 的来源 :parray = array,都是代表数组地址,所以可以对比来写,是一样的意思。
即
parray[0] parray[1] parray[2]
可以相等于
array[0] array[1] array[2]
两种写法代表的都是相同的意思
注意:此时的 parray[i] 不是代表地址,代表的是 array[i],当成array[i]来用即可
那么scanf的时候
scanf("%d",&parray[0]); 或者 scanf("%d",parray); 【只能是第一个这样两种写法】
scanf("%d",&parray[1]);
printf的时候
printf("%d",*parray); 或者printf("%d",parray[0]);
printf("%d",*++parray); 或者printf("%d",parray[1]);
}
为什么:
要让 parray = &array[0];
【 此时的意思是让指针偏移回到首地址,因为上面的普通访问已经把地址偏移到了最后一位,继续遍历偏移的话,会超出范围,导致乱码 】
{{ 所以
指针的偏移一定要注意范围不能超
}}
代码如下:
/*二.指针变量访问数组的值:*/
int array[3] = {1,2,3};
int *parray;
parray = array; //或者parray = &array[0];
//1.普通的访问:
printf("第一个元素的地址:%p\n",parray++);
printf("第二个元素的地址:%p\n",parray++);
printf("第三个元素的地址:%p\n",parray);
//2.通过遍历数组访问
parray = &array[0];
for(i=0;i<3;i++){
printf(" %d ",*parray);
parray++;
}
或者
parray = &array[0];
for(i=0;i<3;i++){
printf(" %d ",parray[i]);
}