【C语言】关于各类变量的存放信息

题目描述

根据下面的代码,填写表格。整数算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];)
  • 全局变量存放在全局区
  • 每个函数单独存放,其中:
    • 函数内部声明的变量只属于该函数
    • 字符数组和字符指针所占用的内存大小不同

这道题难点有二:

  1. char str1[10]={"UESTC"};"UESTC"算字符串常量,但是 str1 对应的内存要占用 10 字节。
  2. void func(int m) 形参也是要占用内存的,在函数被调用时申请内存,在函数结束时撤销。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Beta Lemon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值