空作业

时间:2016-10-13 09:49:14

标签: c pointers null

#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个地址不应该分配给任何变量。

1 个答案:

答案 0 :(得分:1)

  

[..]我认为应该有空分配错误。

C staan​​dard没有提供任何此类保证。

取消引用空指针是undefined behaviour。所以,没有理由说明为什么它打印30。 顺便说一下,你应该将指针参数转换为void*来打印它:

printf("%d %p", *p, (void*)p);