#include<stdio.h>
#include<conio.h>
void main()
{
int *p=NULL;
*p=30;
printf("%d %p", *p,p); //output:- 30 0000
}
p应指向地址0,我认为应该有空分配错误。但是* p如何将输出设为30? 30存储在0000位置?根据我的说法,第0个地址不应该分配给任何变量。
答案 0 :(得分:1)
[..]我认为应该有空分配错误。
C staandard没有提供任何此类保证。
取消引用空指针是undefined behaviour。所以,没有理由说明为什么它打印30。
顺便说一下,你应该将指针参数转换为void*
来打印它:
printf("%d %p", *p, (void*)p);