如果我已经为 int 指针指定了常量值,那么内部发生了什么?
赞,int *p = 5;
如果我打印 * p 和 p 以及为什么会有什么价值?
答案 0 :(得分:4)
如果你有
int *p = 5;
您有一个指向地址p
的变量5
。该地址很可能没有有效的int
值。取消引用指针很可能会导致未定义的行为。写入内存很可能会导致崩溃,并且由于它没有对齐读取,因此在某些不允许未对齐读取的系统上也可能导致崩溃。
在某些情况下, 这样做是有效的,这就是它被允许的原因。例如,考虑具有固定存储器映射的小型嵌入式系统,其中某些"寄存器"存储在某个固定地址。然后你可以制作一个指针并使其直接指向该地址。
答案 1 :(得分:1)
声明
int *p = 5;
表示您创建一个指向整数的指针,并为其内容指定值5
。换句话说,您将指针p
指向内存地址5
,在那里您不知道是否存在有效的整数值。
*p
,则实际打印指针的 内容 ,换句话说,就是p
的整数值指着。
p
,则实际打印指针p
的 地址 ,换言之,p
的内存地址存储。