C语言变量在内存中存储问题

本文详细介绍了C语言中的三种内存划分:堆、栈和静态存储区,并解释了它们各自的特点和用途。此外,还澄清了一个常见误区:如何正确地使用指针来操作字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在C语言中,内存可以划分为3种,堆、栈、静态存储区。

栈:就是auto变量存放区域,自动释放,在编译的时候需要知道空间大小。(如int a = 10;)

堆:一般用作开辟动态存储区,需要人工开辟,人工释放,可以在运行时开辟。(如malloc()和free()函数)

静态存储区:这个区域存放一些常量,不能改变值。(如#define NUMBER 100)


char *p = "Test string";

*p = "string is changed";

这句话本身就是错的,首先字符串不能那样赋值。p指向一个字符,而不是整个一行。

就算换成

*p = 'P';

也是不对的,因为 char *p = "Test string"; 的意思是静态存储区放入"Test string",然后再栈开辟一个指针p,指向这个字符串。

也就是说p在栈中,而其指向的字符串在静态存储区中,所以能改变p指针的指向,但是不能改变其指向的值。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值