C 为什么以及如何返回静态变量的地址是正确的,而对非静态变量执行相同操作会产生错误的结果?
这个定义不起作用,但是C 为什么以及如何返回静态变量的地址是正确的,而对非静态变量执行相同操作会产生错误的结果?,c,static,C,Static,这个定义不起作用,但是 char str[] = "hello"; 这行得通,为什么 完整代码: static char str[] = "hello" 万一 char *retstr(void) { char str[] = "hello"; //This definition dosnt work return str; } int main() { printf("\n%s\n",retstr());
char str[] = "hello";
这行得通,为什么
完整代码:
static char str[] = "hello"
万一
char *retstr(void)
{
char str[] = "hello"; //This definition dosnt work
return str;
}
int main()
{
printf("\n%s\n",retstr());
return 0;
}
您正在尝试返回局部变量str
的地址。这里使用返回值,因为一旦retstr()
函数完成执行,就不存在str
变量
奥托
char str[] = "hello"; //This definition dosnt work
工作正常,因为static
变量作为静态存储持续时间。它的生命周期是程序的整个执行过程。因此,即使在retstr()
函数完成执行之后,str
仍然有效,因此返回值可以有效使用
相关:C11
,第§6.2.4章,物体的储存期限,第3段
。。。使用存储类
说明符static
,具有静态存储持续时间。它的生命周期是程序的整个执行过程,它的存储值在程序启动之前只初始化一次
万一
char *retstr(void)
{
char str[] = "hello"; //This definition dosnt work
return str;
}
int main()
{
printf("\n%s\n",retstr());
return 0;
}
您正在尝试返回局部变量str
的地址。这里使用返回值,因为一旦retstr()
函数完成执行,就不存在str
变量
奥托
char str[] = "hello"; //This definition dosnt work
工作正常,因为static
变量作为静态存储持续时间。它的生命周期是程序的整个执行过程。因此,即使在retstr()
函数完成执行之后,str
仍然有效,因此返回值可以有效使用
相关:C11
,第§6.2.4章,物体的储存期限,第3段
。。。使用存储类
说明符static
,具有静态存储持续时间。它的生命周期是程序的整个执行过程,它的存储值在程序启动之前只初始化一次
这是您返回的本地地址。这就是它不起作用的原因
char str[] = "hello"; //This definition dosnt work
return str;
在本例中,您将“str”变量的作用域更改为整个程序。这就是它起作用的原因
这是您返回的本地地址。这就是它不起作用的原因
char str[] = "hello"; //This definition dosnt work
return str;
在本例中,您将“str”变量的作用域更改为整个程序。这就是它工作的原因。不能从函数返回局部变量。局部变量存在于堆栈上,一旦函数完成,该堆栈空间将被释放并可供下一个函数调用使用
static char str[] = "hello"
一旦超出范围,就不存在任何用于其他函数调用的名为str
的变量
但是static
变量生存期会在程序的整个运行过程中延长
char str[] = "hello"; //this won't work as it is a local variable
因此,在使用静态时,它不会给出任何错误。您不能从函数返回局部变量。局部变量存在于堆栈上,一旦函数完成,该堆栈空间将被释放并可供下一个函数调用使用
static char str[] = "hello"
一旦超出范围,就不存在任何用于其他函数调用的名为str
的变量
但是static
变量生存期会在程序的整个运行过程中延长
char str[] = "hello"; //this won't work as it is a local variable
因此,在使用
static
时,它不会给出任何错误。静态变量只创建一次,在函数返回时不会被销毁,但在函数结束时局部变量会被销毁。
每次调用函数时都会创建局部变量,当函数返回时会被销毁。
对于局部变量:返回一个指向不再存在的字符串的指针。
对于全局变量:字符串仍然存在,因此它将始终工作
静态变量只创建一次,在函数返回时不会被销毁,但在函数结束时局部变量会被销毁。
每次调用函数时都会创建局部变量,当函数返回时会被销毁。
对于局部变量:返回一个指向不再存在的字符串的指针。
对于全局变量:字符串仍然存在,因此它将始终工作