题目描述
根据下面的代码,填写表格。整数算2字节,字符1字节,指针4字节。每个区域的起始地址都是0,内存按2字节编址。
int num = 2;
void main()
{
char str1[10]={"UESTC"};
char *str2="CHENGDU";
char p;
}
void func(int m)
{
int n = 10;
}

解释
首先逐行分析,
int num = 2;//2存储在常量区,num存储在全局区,两个都是整形占2字节。
void main()
{
char str1[10] = {"UESTC"}; //"UESTC"和10存储在常量区,各占6和2个字节
char *str2 = "CHENGDU"; //"CHENGDU"存储在常量区,占8各字节,注意’\0’。
char p; //p存储在main区,占1字节。str1和str2存储在main区,各占4字节
}
void func(int m) //m存储在func区,占2字节
{
int n = 10; //n存储在func区,10存储在常量区,各占2字节。
}
根据出现的顺序,就可以知道相对地址为多少了。每占用两个字节,内存向后偏移一位。
NOTE:
- 常量存储在常量区,这些常量包括:声明变量时初始化的赋值(int n = 10;)、数组的大小(char str1[10];)
- 全局变量存放在全局区
- 每个函数单独存放,其中:
- 函数内部声明的变量只属于该函数
- 字符数组和字符指针所占用的内存大小不同
这道题难点有二:
char str1[10]={"UESTC"};
:"UESTC"
算字符串常量,但是str1
对应的内存要占用 10 字节。void func(int m)
形参也是要占用内存的,在函数被调用时申请内存,在函数结束时撤销。