计算机二级C语言考试

img


看不懂什么意思,解析说的也理解不了,麻烦各位解答一下讲的有点太模糊了

x,y,z都是整数,加1肯定是没毛病的
p指向x的地址,p加1就是将指针指向x后的地址空间,这个地址空间不确定由谁控制,一旦进行p指向的地址操作,就可能无法访问的地址等异常情况

指针你如果要p++的话,应该是*(p++)

用排除法也知道int型加1肯定没问题
只有指针+1会有隐患
因为不同IDE规则不太一样,y的地址并不一定是跟x连续的,有可能中间空一些地址
所以p++不一定就是y的地址,很有可能变成一个野指针

P是指针,指针++指向的地址就变了,可能会是野指针


下面是我一些浅薄理解,比喻可能不太恰当,希望对你有帮助。
------------------------------------------
现在有一间房子 x 他的大小是 4(因为int型占用空间为4),
x = 2相当于房子里的东西,
每个房子都有地址, &x意思是获取到了 x 这个门牌号(地址),
int *p(这里的*表明变量是指针变量) 有个中介p在卖你这个房子(只卖你这一个)
int *p = &x (这里是初始化p), 就是把你的房子地址给了中介。
p 的值就是 x 这个房子的地址也就是门牌号。
*p(这里用*是单目运算符来访问变量的值)就相当于你要去看房子里的东西,也就是*p = 2.
p++(是地址++) 代表什么,代表让中介换了个房子,那你从中介那里就得到的就不是你的房子门牌号了。
(*p)++  代表什么是去改变你的房子里的东西。