c:
int *a = 2;
printf("%d",*a) -> 2
oc:
int *a = 2;
printf("%d",a) -> 2
是我记错了吗?还是真的不同
首先,没不同。
其次,你的题目中的代码应该是写的和想的有问题的:
int *a = 2; 这行的意思是创建int指针a,指针指向0x2这个地址。
按照你的题目的想法,正确的写法是:
int v = 2;
int *a = &v;
所以,你oc那段代码 printf("%d",a) -> 2,输出的是a指向的地址,所以是2
而c那段,printf("%d",*a) -> 2,输出的是0x2这个地址的内容,一般而言,很多操作系统对程序的这个范围内的地址的访问会发生段错误,如果你能输出2且没错误,只能说这个进程的0x2这个地址没被保护可以访问,且内容正好是2而已。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。