c语言,解释一下这道题为什么是B?谢谢!

如题所述

自加,有两种用法:
假如定义了一个变量i=1
1) 若使用i++, 指代先取i的值再另i=i+1
2)若使用++i,指代先使i=i+1再取i的值
所以z++一直是先取z,所以一直是20追问

为什么第二次输出的a,b值为12,42?

追答

这个 ;不是程序运行完一部分了吗
接着prt又运行一次而这次基数为11 41 20

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-01-11
A 数组只有五个元素。 p+0到p+4合法, p+5越界。
B *a其实就是a[0] 所以 *a+1是a[0]+1 不是地址。
C a本身已经等效int*型了,所以 &a其实是int**型。 更准确的说法是int*[5]这样的数组指针。 再加1,其值等效于&a[5]
这段可能不好理解, 总之这里是类型不匹配就好。
D唯一正确项
第2个回答  2015-08-14
首先可以确定参数是传地址,刚开始*z指向变量c,但是*(z++) 表示指针z指向后一个元素,即执行完改操作后,*z指向的不是变量c了,所以变量c的值没变,一直是20.
第3个回答  2015-08-14
因为对z指针做了++运算,而不是z指向的内容.

顺带吐槽一句,考++,--运算符真的很没意义.
第4个回答  2015-08-14
我觉得是C啊。
++a是先加1再执行,后者是执行过后加
是答案错了吗?
第5个回答  2015-08-14
*(z++)不是加的是地址,所以加的是地址,对地址指向的数字无影响