1. 返回局部变量的地址 在C语言中,返回局部变量的地址是不安全的行为,因为一旦函数执行完毕,局部变量的内存将被释放,返回的地址将指向未定义的内存区域,这将导致不可预知的行为。 以下是一个返回局部变量引用的例子,这是错误的做法: #include <stdio.h> int* getVarAddr() { int Var = 42; re
当returnStr函数退出时,栈要清空,局部变量的内存也被清空了,所以这时的函数返回的是一个已被释放的内存地址,所以有可能打印出来的是乱码。 3、返回普通值 intfunc() {inta; ...returna;//允许}int*func() {inta; ...return&a;//无意义,不应该这样做} 直接返回a,返回的是值,结果存储在临时变量中;返回&...
} 上述代码中,globalInt 可以定义在函数外部或者定义成静态变量,这样在整个程序执行期间都存在,此时返回它的地址是安全合法的。 除了上述整数例子,还可以举例字符串,大家有问题欢迎交流🏪 🎉所以,大家在以后的C/C++编程中一定要记住:不能返回局部变量的指针和引用哦。 0 0 发表评论 发表 作者最近动态 李老师爱...
"hello world!"是局部变量存放在栈中。当returnStr函数退出时,栈要清空,局部变量的内存也被清空了,所以这时的函数返回的是一个已被释放的内存地址,所以有可能打印出来的是乱码。 但是 如果按下面这样改一下就ok,不知道为什么 #include <stdio.h> char *returnStr() { char p[]="hello world!"; printf("in...
1、返回局部变量的地址 1 #include <stdio.h> 2 3 int *local_address(void) 4 { 5 int num; 6 printf("Sub function address: %p\n", &num); 7 return # 8 } 9 10 int main(void) 11 { 12 int *pn = NULL; 13 pn = local_address(); 14 printf("Main function address: %p\n"...
一般来说,在函数内对于存在栈上的局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错;但是如果返回的是局部变量的地址(指针)的话,就造成了野指针,程序运行会出错,因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样...
这里的c不是局部变量吗, 为什么还能从add函数返回呢?求教!我的理解局部变量在函数调用结束后就会被释放, 比如下面这段代码: #include <stdio.h> #include <stdlib.h> char *int_2_str(int value) { char buf[20]; sprintf(buf, "%d", value); return buf; } int main(int argc, char ** argv) ...
C/C++返回局部变量的引用/地址 程序1 下面这段程序,返回局部变量的引用,将其赋给指针p,第一次打印可以输出a的值,第二次便是一个随机数: #include<iostream> using namespace std; int *p = NULL; int& foo() { int a = 10; return a; }
1.局部变量: (1)在函数的开头定义(如定义形参)。 (2)在函数内部定义(如在函数里面定义的变量)。 (3)在函数内部的复合语句定义(如for循环,花括号内)。 前两种方式定义的变量可以在函数内任何地方使用,而第三种方式定义的变量只能在复合语句内使用。