虚拟地址空间

一,概念介绍

image

二,代码示例

//数组
int c[5];

int main(void)
{
	for(int i=0;i<5;i++)
	{
		printf("%d ",b[i]);
	}
	//打印结果为 0 0 0 0 0,因为全局变量默认初始化
	int a[5];//局部变量
	for(int i=0;i<5;i++)
	{
		printf("%d ",a[i]);
	}
	//打印结果为一些乱七八糟的数,因为局部变量是不会默认初始化的
	
	int b[5] = {1,2};
	for(int i=0;i<5;i++)
	{
		printf("%d ",b[i]);
	}
	//打印结果为 1 2 0 0 0,因为进行了初始化,数组空位就成0了
}
//字符串和字符数组
#include <stdio.h>

int s[10];

int main(void)
{
    char *s = "ALLO";//定义一个指针指向一个字符串常量,"ALLO"(常量!!!)是存储在.rodata段的
    s[0] = 'H';//会报错误,因为.rodata段是只读的

    char s[] = "ALLO";
    /*
    定义一个数组,数组名指向一个字符串常量,数组的空间在栈上分配,
    然后把字符串常量的空间给拷贝到栈上数组对应的空间
    */
    s[0] = 'H';//没有问题,栈上的空间是可读写的
}
//函数
int fun(void)
{
	return 0;
}

int main(void)
{
    fun = 1;//这种写法会出错,不只是因为数据类型错误,并且fun()是在代码段的,无法改变
}

posted @ 2022-08-24 23:25  烟尘墨  阅读(35)  评论(0)    收藏  举报