假设以下简单代码:
int main(void){
char *p;
int i = 1;
while(i){
char str[] = "string";
p = str;
i = 0;
}
/* Can I use above string by using `p` in here? */
return 0;
}
我声明了一个字符串(char数组)作为局部变量,仅在中有效while{}
。但是我将其数组地址保存到指针p
,该指针在outside之外也是有效的while{}
。可以while{}
通过使用外部字符串p
吗?
如果可以,为什么行得通?
可以
while{}
通过使用外部字符串p
吗?
没有。在的范围内while
p
指向的第一个字符str
。外面while
没有str
,因此没有p
指向的有效存储位置。
您可以通过static
在str
声明中使用存储类说明符来达到预期的效果
static char str[] = "string";
外面while
你可以用p
printf("%s\n", p);
这是因为static
在整个程序执行过程中,块中声明的变量位于相同的存储位置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句