C语言空指针疑问:ptr1赋值为NULL后,ptr2=ptr1是否也为NULL?
关于C语言指针赋值后是否为NULL的问题
嘿,其实你这两个问题说的是同一个场景,答案很明确:是的,ptr2的值肯定是NULL。
咱们来拆解一下背后的逻辑:
- 在C语言里,指针变量的核心作用就是存储内存地址。当你把一个指针赋值给另一个指针时,本质就是把前者存储的地址值完完整整地复制给后者。
NULL是C标准定义的空指针常量,它的意义就是标记指针“没有指向任何有效内存地址”(通常被实现为(void*)0或者直接是数值0)。
看你给出的这段代码:
int* ptr1 = NULL; int* ptr2 = ptr1;
ptr1被初始化为空指针(值为NULL),接着把ptr1的值复制给ptr2,那ptr2自然也会拿到这个空指针的值,也就是NULL。
如果你想亲手验证,可以加个打印语句试试:
#include <stdio.h> int main() { int* ptr1 = NULL; int* ptr2 = ptr1; printf("ptr1的值: %p\n", (void*)ptr1); printf("ptr2的值: %p\n", (void*)ptr2); return 0; }
运行后你会看到两个指针的输出完全一致,都是空指针的典型表示(一般是0x0或者类似形式)。
最后补充个小细节:这时候ptr1和ptr2是两个独立的指针变量,之后如果你修改其中一个的指向(比如让ptr1指向某个int变量),ptr2的指向不会跟着变——因为它们只是初始值相同,本身是各自独立的内存空间。
内容的提问来源于stack exchange,提问作者user9299513
相关产品推荐
相关产品推荐

