因为p是指针,指针保存的内容是地址,所以print("%d",*p)会输出一个负值;你虽然free(p),释放了动态申请的内存,但并没有使 p=0 | p = NULL, 所以p变为野指针,指向未知的内存中,所以输出的值和以前的不一样。
自己解决了 哈哈 不过还是谢谢你 ty
这就是指针的强大之处以及让新手困惑的地方,要理解这个问题,请结合操作系统原理。
哈哈 谢谢你的意见 请问-572662307 这难道表示着什么吗
@keiling: 表示你 malloc 的 4字节(x86)内存中存储的值。
狗屁不通!
在C语言中,指针类型的输出的转换格式是%p而不是%d。
用%d格式转换并输出指针是错误的,因为C语言从没有保证这样写会输出什么。
内存地址 是十六进制的 这谁都知道 没什么好说的 garbageMan 根本没回答问题
free(p);释放了动态申请的内存 但并没有使 p=0 | p = NULL, 所以p变为野指针(这样写本来就是不好的编程习惯),强制要其输出值时只能得到一个垃圾数字;
malloc出来的内存是随机的 故返回的内存首地址也是随机(动态开辟内存空间)的 所以每次运行 printf("%d\n",p)的值都会变;
每次运行 printf("%d\n",&p)的值不会变,因为这里输出的是 指针变量P 自身的内存地址 而不是其存放的地址;