if else 小问题!求解答!

时间:2022-11-03 17:36:35
请问下:
{
if (a! = 0)
{
int imax[100] = {1};
                 .......;
}
else {
char max[100] = "hello"; 
                    ........;
}
}
如果a!=0 成立 执行里面内容 那就说明 else的部分不会被执行到了,那是不是else 里面定义的char max[100]在内存中也不存在了呢,比如char max[100] 后面还有很多定义(不包括静态变量区);

3 个解决方案

#1


看编译生成的汇编代码

#2


是的,就算执行else,char max[100]的生命周期也仅仅在else范围中

#3


函数体内的变量的生命周期在函数体内都可以访问。

vs2008
int _tmain(int argc, _TCHAR* argv[])
{
//进入main函数后就在栈上开辟好了变量所需的空间。
int a=4;
//通过变量a的地址推算出数组imax,max的地址。
memset((char*)((int)&a-8-100),0,100);
//修改imax数组字符串"vvvvvvv"。
strcat((char*)((int)&a-8-100),"vvvvvvv");
memset((char*)((int)&a-8-100-8-100),0,100);
//修改max数组字符串"kkkkkkkkk"。
strcat((char*)((int)&a-8-100-8-100),"kkkkkkkkk");
if (a!=0)
{
char imax[100] ;
//打印imax字符串"vvvvvvv"。
printf("%s\n",imax);
}
else {
char max[100]; 
//打印max字符串"kkkkkkkkk"。
printf("%s\n",max);
}
return 0;
}

#1


看编译生成的汇编代码

#2


是的,就算执行else,char max[100]的生命周期也仅仅在else范围中

#3


函数体内的变量的生命周期在函数体内都可以访问。

vs2008
int _tmain(int argc, _TCHAR* argv[])
{
//进入main函数后就在栈上开辟好了变量所需的空间。
int a=4;
//通过变量a的地址推算出数组imax,max的地址。
memset((char*)((int)&a-8-100),0,100);
//修改imax数组字符串"vvvvvvv"。
strcat((char*)((int)&a-8-100),"vvvvvvv");
memset((char*)((int)&a-8-100-8-100),0,100);
//修改max数组字符串"kkkkkkkkk"。
strcat((char*)((int)&a-8-100-8-100),"kkkkkkkkk");
if (a!=0)
{
char imax[100] ;
//打印imax字符串"vvvvvvv"。
printf("%s\n",imax);
}
else {
char max[100]; 
//打印max字符串"kkkkkkkkk"。
printf("%s\n",max);
}
return 0;
}