uninitialized data和initialized data统称为全局数据区
text区又叫代码区(或代码段),这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
char *s = "HelloWorld";
指针s存放于栈区,"HelloWorld"存放于text区,不可修改
*s = ‘h’ 尝试修改字符串第一个字符,将会出现编译通过,运行报错的情况,因为text区一般是只读的,不可修改。
举例分析:
#include <iostream>
int global_a = 1;
static int global_b = 2;
int global_c = 3;
int global_d;
int global_e;
int main()
{
int a = 11;
int b = 22;
int c = 33;
static int static_a = 4;
static int static_b;
static int static_c;
printf("a的地址为:%p\n", &a);
printf("b的地址为:%p\n", &b);
printf("c的地址为:%p\n", &c);
int arr[5] = { 1,2,3,4,5 };
int len = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < len; i++)
{
printf("&arr[%d]: %p\n", i, &arr[i]);
}
printf("global_a的地址为:%p\n", &global_a);
printf("global_b的地址为:%p\n", &global_b);
printf("global_c的地址为:%p\n", &global_c);
printf("global_d的地址为:%p\n", &global_d);
printf("global_e的地址为:%p\n", &global_e);
printf("static_a的地址为:%p\n", &static_a);
printf("static_b的地址为:%p\n", &static_b);
printf("static_c的地址为:%p\n", &static_c);
char s1[] = "HelloWorld";
char* s2 = "HelloWorld";
char* s3 = "HelloWorld";
printf("s1:%p\n", s1);
printf("s2:%p\n", s2);
printf("s3:%p\n", s3);
}
结果:
参考:
1.
2.
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务