2个回答
展开全部
因为p是指针(不知道你能不能从底层理解指针是什么),不能直接操作它。
指针的实质,是一个内存地址,是寄存器寻址甚至其相对寻址的高级语言实现。但为了保护操作系统或其它软件,所以编译器不会让你直接操作它。只能用该程序申请的其它指针来替换它。ABC里都是一个用户输入,如果把这个值赋给指针,就会出现可能把这个地址改到其它程序,甚至操作系统内核的内存地址上,而且还不限于那个地址上是指令或是数据 。
A不对,是编译器不让。当然,汇编上看起来没有任何毛病 mov ax,100 然后[ax]寄存器寻址。B那里是一样的,变成了mov ax, [a的地址+5],但这些操作都是非法的。
指针的实质,是一个内存地址,是寄存器寻址甚至其相对寻址的高级语言实现。但为了保护操作系统或其它软件,所以编译器不会让你直接操作它。只能用该程序申请的其它指针来替换它。ABC里都是一个用户输入,如果把这个值赋给指针,就会出现可能把这个地址改到其它程序,甚至操作系统内核的内存地址上,而且还不限于那个地址上是指令或是数据 。
A不对,是编译器不让。当然,汇编上看起来没有任何毛病 mov ax,100 然后[ax]寄存器寻址。B那里是一样的,变成了mov ax, [a的地址+5],但这些操作都是非法的。
追问
那D怎么就对了呢,好奇怪
追答
因为a是一个指针啊,是一个地址,而且它的空间是10,所以a+2也不会越界。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询