K·KNOWLEDGE OS学习 / 思考 / 构建
搜索

C语言:指针与内存

从地址、解引用和对象生命周期理解指针,附可编译的 C 语言示例。

演示数据:这是一篇技术示例,不代表站点所有者的课程笔记或学习经历。

地址与解引用

对象占用内存,指针保存指向对象的地址。&value 获取对象地址,*pointer 访问其指向的对象。指针本身也有类型。

#include <stdio.h>

int main(void) {
    int value = 42;
    int *pointer = &value;
    *pointer = 43;
    printf("value = %d\n", value);
    return 0;
}

预期输出为 value = 43。这里没有分配动态内存,pointer 指向的局部对象在 main 返回前有效。

生命周期比地址更重要

非空指针不保证可解引用:它也可能是悬空指针。不要返回局部变量的地址,不要在 free 后继续访问对象。指针运算必须限制在同一数组及其尾后位置允许的范围内,尾后指针不可解引用。

验证与练习

把示例保存为 pointer.c,可用支持 C17 的编译器执行:

cc -std=c17 -Wall -Wextra -pedantic pointer.c -o pointer
./pointer

再尝试解释指针与其指向对象的区别。参阅 学习路线 了解如何用小实验建立反馈。

参考资料

继续探索