#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//一、只读数据.rodata 段,用于存储程序中的只读字符串等常量。
// 定义一个宏常量 Pi,类型为 double(被引用时在rodata)
//如果程序中没有对 Pi 的引用,或引用被优化,那么 Pi 的值就不会出现在 .rodata 段或任何其他段中。
#define Pi 3.14
// 定义一个常量 z,类型为 int
const int z = 314;
//二、数据段.data,用于存储程序中已初始化的全局变量和静态变量。
// 定义一个变量 a,类型为 int
int a = 111;
// 定义一个变量 b,类型为 float
float b = 11.1;
// 定义一个变量 c,类型为 char
char c = 'a';
// 定义一个变量 d,类型为 _Bool(布尔类型)
_Bool d = 111;
// 定义一个整型数组 G,包含 3 个元素
int G[3] = {
111, 112, 113
};
// 定义一个指针变量 f,指向 int 类型的变量 a
int *f = &a;
//定义一个指针常量ptrConst,指向 int 类型的变量 a
int *const ptrConst = &a;
//定义一个常量指针ptr,指向 int 类型的常量 z
const int *ptr = &z;
//三、未初始化数据段.bss,用于存储程序中未初始化的全局变量和静态变量。
//定义一个静态变量y
static int y;
// 定义一个枚举类型 DAY,包含一周的星期
enum DAY {
MON = 1, TUE, WED, THU, FRI, SAT, SUN
} day;
// 定义一个结构体 Books,并实例化为变量 book
struct Books {
int id;
char title[20];
char author[20];
} book;
// 定义一个联合体 Data,并实例化为变量 data
union Data {
int h;
float i;
char str[20];
} data;
// 四、代码段.text,储存程序定义的Hello,main等函数的地址,用于可执行文件代码功能的加载。
// 五、栈,用于储存函数内局部自动变量,函数参数。任何在函数调用中定义的局部变量(非静态)都将在栈上分配内存。
void Hello(int he) {
int hel;
static int hell;
printf("hello world/n");
}
int main() {
book.id = 123;
strcpy(book.title, "xkxy");
data.h = 111;
data.i = 11.1;
int n;
printf("输入数组大小:");
scanf("%d", &n);
//六、堆,用于储存malloc等动态分配的内存变量。此处即malloc分配的内存位于堆上,而指针arr位于栈上
int *arr = (int *)malloc(n * sizeof(int));
for (int j = 0; j < n; j++) {
arr[j] = j + 1;
}
return 0;
}
06-03
1914
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
10-21
2196
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)