C语言变量在内存中存储问题
2014-02-12 11:53
579 查看
在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指针的指向,但是不能改变其指向的值。
栈:就是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指针的指向,但是不能改变其指向的值。
相关文章推荐
- windows下变量在内存中的字节存储顺序(c语言)
- 内存角度理解C语言中变量的存储形式
- C 语言编译过程 C语言中各种数据存储的不同内存区域 关于sizeof 结构体比实际的大的问题
- 关于Java变量在内存中的存储问题
- 关于c语言变量的存储及内存的分配
- 各变量在内存中存储情况分析,格式输出问题
- C语言:自己动手查看float以及double类型的变量2.5在内存中的存储方式。
- C语言:自己动手查看float以及double类型的变量2.5在内存中的存储方式。
- 关于c语言的变量存储及内存分配
- 从内存理解c语言中变量的存储类型
- c语言 变量的存储类别以及对应的内存分配?
- C语言变量存储类别和内存四区
- 嵌入式学习10(C语言五大内存区间,变量的作用域和生存期,变量的存储类型)
- C语言中结构体中变量存储的对齐问题
- 从内存理解c语言中变量的存储类型
- C语言连续申请变量内存问题
- C语言变量存储区域 进程内存布局
- 从内存理解c语言中变量的存储类型
- c语言中关于变量的内存分布(关于变量的存储)
- C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?