这两段C指针代码有什么问题

[复制链接]
查看11 | 回复5 | 2013-4-5 15:34:47 | 显示全部楼层 |阅读模式
for(i=0;i<7;i++){printf("%d\t",(*p)++);}如上,你的第一个循环中是(*p)++,也就是p指向的元素1不停地加1,最后数组的第一个元素已经变成8了。所以最后输出就是第一个数字,不过数字被加到8了而已。...
回复

使用道具 举报

千问 | 2013-4-5 15:34:47 | 显示全部楼层
因为前面一个循环中的(*p)++在输出数组元素后,将数组下标0元素一直自加到8,p没有移动后面一个循环移动的是p,所以先输出8...
回复

使用道具 举报

千问 | 2013-4-5 15:34:47 | 显示全部楼层
首先第一个循环是在改变数字的第一个元素,因为是先输出后加一。所以循环结束后第一个元素的值变成了8但只能看到7。第二个循环则是把数组循环输出 而此时的数组首个元素是8,所以看到的是8....
回复

使用道具 举报

千问 | 2013-4-5 15:34:47 | 显示全部楼层
printf("%d\t",(*p)++);这条语句有问题,()的优先级最高,所以先执行()内的语句,*p已经不是指针了,是元素sz[0],然后*p七次++后自然导使sz[0]=8,然后第二次循环输出从sz[0]开始自然是输出8,printf("%d\t",*(p++))是对的,其实效果跟printf("%d\t",*p++)效果是一样的,*和++优先级相同...
回复

使用道具 举报

千问 | 2013-4-5 15:34:47 | 显示全部楼层
符号优先级和怎么结合的问题,(*p)++是先得到*p然后*p+=1循环7次自然是8后面*(p++)是得到*p 然后p+=1 就成了循环数组里面的元素了...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行