//指针数组 char* p1[]={"123","456","789"}; //二维数组
//指针数组char*p1[]={"123","456","789"};//二维数组charp2[3][4]={"123","456","789"};二维数组放在栈区我知...
//指针数组
char* p1[]={"123","456","789"};
//二维数组
char p2[3][4]={"123","456","789"};
二维数组放在栈区我知道,为什么指针数那些数字要放在常量区?那些数字放在栈区然后指针再指向它们不行吗? 展开
char* p1[]={"123","456","789"};
//二维数组
char p2[3][4]={"123","456","789"};
二维数组放在栈区我知道,为什么指针数那些数字要放在常量区?那些数字放在栈区然后指针再指向它们不行吗? 展开
1个回答
展开全部
所有代码指定的量,都是存放在常量区,这是编译器决定的
代码在初始化的时候,会将这些常量加载到栈区
这是因为栈是变化的,和运行环境相关的东西,编译器无法预言和确定
唯有在函数初始化的时候从常量区加载,并初始化,才是可行的策略
所以所有的指定量都是存放在常量区,因为只有这些是可控制和可预期的。也正是因为如此,常量的总和大小不能超过64k(65536字节),否则编译器会出现错误!因此无法定义一个非常大的常量数组,否则会导致常量区溢出,进而导致编译器失败
代码在初始化的时候,会将这些常量加载到栈区
这是因为栈是变化的,和运行环境相关的东西,编译器无法预言和确定
唯有在函数初始化的时候从常量区加载,并初始化,才是可行的策略
所以所有的指定量都是存放在常量区,因为只有这些是可控制和可预期的。也正是因为如此,常量的总和大小不能超过64k(65536字节),否则编译器会出现错误!因此无法定义一个非常大的常量数组,否则会导致常量区溢出,进而导致编译器失败
追问
那为什么二维数组就放在了栈区?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询