取消引用指针
int a = 1;
int *a_pointer = &a;
要取消引用 a_pointer
并更改 a 的值,我们使用以下操作
*a_pointer = 2;
这可以使用以下打印语句进行验证。
printf("%d\n", a); /* Prints 2 */
printf("%d\n", *a_pointer); /* Also prints 2 */
但是,人们会错误地取消引用 NULL
或其他无效指针。这个
int *p1, *p2;
p1 = (int *) 0xbad;
p2 = NULL;
*p1 = 42;
*p2 = *p1 + 1;
通常是未定义的行为 。p1
可能无法解除引用,因为它指向的地址 0xbad
可能不是有效地址。谁知道那里有什么?它可能是操作系统内存或其他程序的内存。使用这种代码的唯一时间是嵌入式开发,它将特定信息存储在硬编码地址中。p2
不能被解除引用,因为它是 NULL
,这是无效的。