函数中: case{}块里头局部变量buff的地址,在块外面还能访问吗
函数中: case{}块里面局部变量buff的地址,在块外面还能访问吗?
举个简单的例子:
int cmd = 0;
char *pSendBuf = NULL;
switch(u32CmdType)
{
case 0:
{
char buff[32] = {0};
strcpy(buff, "some date");
pSendBuf = (char *)buff;
}
break;
}
printf("pSendBuf = %s\n", pSendBuf);
打印:some date
case{}块里面的局部变量buff地址,在块外面还能这样访问吗?
------解决思路----------------------
不能访问,作用域的范围就在{}
------解决思路----------------------
不能鸟~花括号以内
------解决思路----------------------
这个涉及到两个名词:作用域和生存期
作用域就是变量所在的{}内,而生存期是和栈关联的,在函数main的栈的生存期内buff的指针和指向的数据是一直存在的,因此在外面通过pSendBuf是可以访问的,但是buff就不能被访问了(编译都会报错)
------解决思路----------------------
感觉不能用,未测试。
这么用说不定会出现什么效果,感觉这么写就是在挑战系统的忍耐度
------解决思路----------------------
在C中,标准里面提到4种作用域: function, file, block, and function prototype. 你说问题的属于其中的block作用域问题!
处在作用域外不能访问作用域内的变量,可以访问同一作用域的变量!函数中的{ } 开启一个新的块作用域!遇到 ‘{‘就标示一个新的作用域开始,’}‘标示一个作用域的结束!因此,是不能访问!
------解决思路----------------------
栈中的基本变量退出其作用域时,没有谁执行一段代码去释放/销毁/析构它所占用的内存,仅仅是没人再去理会的留在当前栈顶上方的若干遗留下来可被后续压栈操作覆盖的无用数据而已。
而栈中的类变量退出其作用域时,会自动执行其析构函数,……
举个简单的例子:
int cmd = 0;
char *pSendBuf = NULL;
switch(u32CmdType)
{
case 0:
{
char buff[32] = {0};
strcpy(buff, "some date");
pSendBuf = (char *)buff;
}
break;
}
printf("pSendBuf = %s\n", pSendBuf);
打印:some date
case{}块里面的局部变量buff地址,在块外面还能这样访问吗?
------解决思路----------------------
不能访问,作用域的范围就在{}
------解决思路----------------------
不能鸟~花括号以内
------解决思路----------------------
这个涉及到两个名词:作用域和生存期
作用域就是变量所在的{}内,而生存期是和栈关联的,在函数main的栈的生存期内buff的指针和指向的数据是一直存在的,因此在外面通过pSendBuf是可以访问的,但是buff就不能被访问了(编译都会报错)
------解决思路----------------------
感觉不能用,未测试。
这么用说不定会出现什么效果,感觉这么写就是在挑战系统的忍耐度
------解决思路----------------------
在C中,标准里面提到4种作用域: function, file, block, and function prototype. 你说问题的属于其中的block作用域问题!
处在作用域外不能访问作用域内的变量,可以访问同一作用域的变量!函数中的{ } 开启一个新的块作用域!遇到 ‘{‘就标示一个新的作用域开始,’}‘标示一个作用域的结束!因此,是不能访问!
------解决思路----------------------
栈中的基本变量退出其作用域时,没有谁执行一段代码去释放/销毁/析构它所占用的内存,仅仅是没人再去理会的留在当前栈顶上方的若干遗留下来可被后续压栈操作覆盖的无用数据而已。
而栈中的类变量退出其作用域时,会自动执行其析构函数,……