使用任意数字指针初始化

时间:2012-05-04 12:47:14

标签: c pointers

{
    int *p=12;
    printf("%p",p);
    printf("\n%d",p);
}

输出:

0000000C

12

问题:那么p是否分配了地址0x0000000C?

{ 
    int *p=12;
    *p=22;
}    

但是这个没有运行。那么实际发生了什么?

2 个答案:

答案 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)