You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:09:11