{
int *p=12;
printf("%p",p);
printf("\n%d",p);
}
输出:
0000000C
12
问题:那么p是否分配了地址0x0000000C?
{
int *p=12;
*p=22;
}
但是这个没有运行。那么实际发生了什么?
答案 0 :(得分:4)
int *p=12;
这声明了一个指针并设置了它指向12
的地址。
*p=22;
这将取消引用指针并将22写入该内存地址int
的{{1}}。由于您没有分配任何内存,只是将指针设置为指向随机地址,因此会导致运行时错误。
让您感到困惑的是,这两段代码都包含12
。但是,第一个赋值是指针,第二个赋值是指针。这只是在C语言编程时必须习惯的符号过载之一。
答案 1 :(得分:0)
两种情况都有不明确的行为。
第一个示例的行为未定义,因为您使用了无效指针。
第二个例子是最差的,因为你 derefernce 一个地址无效的指针。
int *p=12; // set the address 12 to the int pointer called p
*p=22; // set the value 22 to the address 12 (invalid address)