但很多回答没有说清楚,或者没有强调的,是返回的是被移动的结果。
所以这个函数体在呢内存中就销毁了。你即使能从函数中返回一个局部变量。你再去读这个地址的时候。东西都不在了。3、还有一点。编译器在分配函数的空间的时候,地址不是固定的。所以你每次运行程序,你会发现 int a=3 printf(f"%d",&a),不都是一样的。所以你的问题很明了了。
当函数返回局部变量时,函数的生命期已经结束,他所分配的局部变量也已经销毁,所以如果你返回局部变量的地址,这个地址将是无效的,不能保证这个地址中的值是什么。2:严格来说,函数只能返回分配在堆上的数组的指针。比如说:int* func(){ int *p = new int[10];//数组分配在堆上 return p;} ...
在程序中,只在特定的过程或函数中可以访问的变量,是相对与全局变量而言的。全局变量也称为外部变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。局部变量可以和全局变量重名,但是...
#include <stdio.h> //指针编程原则:不要返回函数栈内的局部变量的地址 //换句话说,不要返回指向栈内局部变量的指针 //因为出了函数,局部变量被销毁,这个地址也就没有意义了。 int *add(int l,int r) { int ret; ret=l+r; return &ret; //不能返回地址,可以加个指针变量,存储地址返回,比如int *p...