{
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;
}
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;
}
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;
}