【C语言】数据在内存中的存储方式

【C语言】数据在内存中的存储方式

存储区

图解

代码

#include <stdio.h>
#define LONG 10
const int constVariable1  = 111; // 常量1 
const char constVariable2 = 'a'; // 常量2 
const char constString[]= "hello"; //  常量3-字符串 
static int globalVariable1 = 112; // 全局变量1(static 可以省略) 
int globalVariable2 = 11111; // 全局变量2 
char globalString[] = "hello"; // 全局变量3 (字符串) 

void fun2();
void fun1()
{
    
    
	int localVariable = 5; // 局部变量 
	printf("栈区(局部变量存放区)地址:%x\n",&localVariable);
}
int main()
{
    
    
	printf("代码区(fun1 方法)地址:%x\n",fun1);
	printf("代码区(main 方法):%x\n",main);
	printf("代码区(fun2 方法):%x\n\n",fun2);
	 
	printf("全局静态区1(全局变量)地址:%x\n",&globalVariable1);
	printf("全局静态区2(全局变量)地址:%x\n",&globalVariable2);
	printf("全局静态区3 (全局变量 字符串)地址:%x\n\n",&globalString);
	
	printf("常量区地址1:%x\n",&constVariable1);
	printf("常量区地址2:%x\n",&constVariable2);
	printf("常量区地址3(常量字符串):%x\n\n",&constString);
	
	fun1();

	return 0;
 }
 void fun2() {
    
    }

结果

分析

方法的地址在代码区中,个人认为应该在代码区中,编译后方法名就是一个地址,方法名不存在于内存中。调用方法时就会调到这行地址执行。

个人认为,C语言中的存储区是电脑内存的一部分,在一部分内存中分为了代码区,全局静态区,常量区,堆栈,这样分区会比较清晰,不会显得混乱。

在学习存储区时,发现常量区是在全局静态区前面的,不过在我验证时发现全局静态区的地址在常量区前面,我猜测可能在不同编译期会有所不同。

数据存储到内存

char 理解

char,int,short,long等标识在内存中开辟的大小

这里重点说明一下 char,因为之前我一直认为只有 char 才能表示字符,或者才能把字符输出到控制台,其实不是,char 也只是一个在内存中开辟一个字节的标识符,常用于存储字符,所以叫 char ,和 int,long都一样

代码

char char1 = 65;
int char2 = 66;
long char3 = 67;
printf("char 类型: %d\n",char1);
printf("int 类型:%d\n",char2);
printf("long 类型: %d\n",char3);

printf("\n----------- 将输出类型 d 改为 c ------------\n");
printf("char 类型: %c\n",char1);
printf("int 类型:%c\n",char2);
printf("long 类型: %c\n",char3);

printf("\n----------- ''也可以表示为数字 ------------\n");
char char4 = 'e';
int char5 = 'f';
printf("int 类型:%d\n",char4);
printf("long 类型: %d\n",char5);

结果

分析

char 也其他整型数据类型一样,都是表示数字,你可以在输出的时候定义 %c 就可以输出为字符,int ,long 也可以输出为字符。同理,在赋值时给变量赋值 ‘a’,本质是给变量赋值 65,打印时你可以选择用 %d 打印 65,也可以用 %c 打印 a。

猜你喜欢

转载自blog.csdn.net/weixin_62726289/article/details/129466084