C语言中声明指针变量时系统会自动分配内存吗?未初始化的情况呢?
关于C语言指针变量的内存分配与未初始化问题
首先明确核心结论:
- 声明指针变量时,系统会给指针变量本身分配内存,但不会自动为指针指向的目标对象分配内存。
详细解释:
指针变量本身的内存分配
指针本质上也是一个变量,和你熟悉的int变量一样——声明时系统会为它分配一块内存空间(大小由系统位数决定:32位系统占4字节,64位系统占8字节),这块内存的作用是存储另一个变量的内存地址。未初始化的指针状态
如果指针声明后没有初始化,它的内存里会存储随机的垃圾值,也就是一个毫无意义的内存地址。这时候如果你直接通过这个指针去读写数据(比如写*p = 10;),会访问到不属于程序的非法内存区域,大概率触发段错误导致程序崩溃,甚至可能破坏其他内存中的数据,属于非常危险的操作。
示例代码:
// 声明未初始化的指针 int *p; // 系统给p分配了内存,但p中是随机垃圾值 // *p = 10; // 禁止这么写!会导致非法内存访问 // 正确用法1:指向已存在的变量 int a = 5; int *p = &a; // p存储变量a的内存地址,此时*p可以正常读写a的值 // 正确用法2:动态分配内存给指针指向的对象 #include <stdlib.h> int *p = malloc(sizeof(int)); // 调用malloc分配一块int大小的内存 if (p != NULL) { // 必须检查malloc是否成功(内存不足时会返回NULL) *p = 10; free(p); // 动态分配的内存用完后必须释放,避免内存泄漏 }
内容的提问来源于stack exchange,提问作者zhm
相关产品推荐
相关产品推荐

