c语言指针与数组问题,运算符到底是个什么鬼?

2024-12-18 23:27:42
推荐回答(3个)
回答1:

*p是取p指针所指向的内存内容

*p++是分两个部分的:先取指针内容,再移动指针
而结合具体的代码,移动指针是在本代码之后进行的:
对于第一题来说,当执行时*p++本身的值为a[1]的内容,然后执行p++后指向a[2],所以再取*p的值时,值为30
a[1]=20;a[2]=30;
p=&a[1]//指向a1
c=*p++;//执行*p++时,它的值c应该是20,此语句运行完成后,p批向a2
d=*p;//已经指向a2,所以d的值为30

而第二题来说,可以分成这两步:printf("%d",*p); p++
所以它在执行时,1肯定也是被执行的。因为第一次运行printf语句时,p是指向a【0】的

回答2:

我觉得这样的问题就是为难初学者,看多了就明白了

  1. 先搜一下运算符的优先级  * 小于++ ,所以p++ 指向了a[2]

  2. 自增自减 运算符 有一个规律   先执行后运算

    先直线printf("%d",*p) 然后运输p++;


你可以搞一个简单的 例如 j=0;

printf("%d",j++);也就明白了先执行后运算这句话了.

回答3:

如果单独一句 *p++; 那么确实*p的值变成30。
但是for循环里的printf()中的*p++,它的默认操作是先取*p的值,执行完printf("%d",*p); 再执行p++;