二维数组和指针问题(包括自加问题)

发布时间:2024-05-16 18:25 发布:上海旅游网

问题描述:

问题一:
#include<stdio.h>
main()
{
int a[]={2,4,6,8},*p=a,i;
for(i=0;i<4,i++)
a[i]=*p++;
printf("%d\n",a[2]);
}
我的分析:指针P指向数组a的首地址,在for循环里,表达式*p++(++与*同一级,即先运算p++在进行指针运算)当i=0时,a[0]=*p++(此时指针p指向数组a的第二的元素,即4)当i=1时,a[1]=*p++(此时指针p指向a数组第三个元素即6)依次类推。当i=3时,a[3]=*p++(此时指针益处,a[3]值为0)所以printf("%d\n",a[2]);结果为8
为什么答案是4呢,我错在哪?
问题二:
int a[10],*p,k;
for(p=a,k=0;k<10;k++)
{
scanf("%d",p);
p++;
}
可以进一步简化成
int a[10],*p,k;
for(p=a,k=0;k<10;k++)
scanf("%d",p++);
我的分析:简化以后运行for循环时,当k=0时scanf("%d",p++)p++进行自加运算,指针p已经移动,即指针此时指向a数组的第二个元素,即读入的第一个数据应存在于a数组的第二的元素中, 第一个元素为空。
我错在哪?
小弟自学C语言,道路十分艰难,遇到好多问题,今年四月还要参加等级考试,不知道哪位高手愿意指点一二,感激不尽,小弟QQ9684262 只需说明C语言即可。
第一个答案是6 写错了,不好意思

问题解答:

p++和++p都是自增运算符,前者先执行其他操作再加,后者先加再执行其他操作。
第一个问题,是先取p值,然后p加一指针后移(但答案不是4啊)
第二个问题同理

问题1:为什么我的答案是6呢,是先做a[i]=*p,然后是p++吧,这个程序其实什么都没有改变,for那边是不是写错了?应该是:for(i=0;i<4;i++)??

问题2:关键是操作符"++"的位置~!!p++表示先用p进行该句语句操作,然后再自增加1,而++p则象你说的,先进行自加运算,再运行该语句~!这么简化是没有问题的.

热点新闻