请参阅下面的两个代码!
int main() {
int a = 12;
int *p;
*p = a;
}
和这段代码,
int main() {
int a = 12;
int *p;
p = &a;
}
在第一段代码中,将指针取消引用为this *p = a
,在第二段代码中,variabe的地址a
设置为指针变量。
我的问题是这两段代码有什么区别?
在您的第一段代码中:
int main() {
int a = 12;
int *p;
*p = a;
}
您有严重的不确定行为,因为您要尝试的是将值赋给当前指向a
的int
变量。但是,尚未分配“地址”,因此它将具有一个任意值-无效-值!一些编译器可能会初始化为零(或),但这仍然是一个无效地址(在大多数系统上)。p
p
p
NULL
您的第二个代码段是“声音”,但就目前而言,实际上并没有实现任何目的:
int main() {
int a = 12;
int *p;
p = &a;
}
在这里,您正在为指针变量;分配一个值(即address)p
。在这种情况下,p
现在指向的a
变量(即,它的值是地址的a
)。
因此,如果您将这样的代码附加到第二个代码段的末尾:
*p = 42;
然后打印出的值a
,您会看到其值已从最初指定的更改12
为42
。
随时要求进一步的澄清和/或解释。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句