取消引用指针

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,这是无效的。