局部变量分为局部自动变量和局部静态变量,无论自动还是静态,返回局部变量都是没有问题的,因为返回值不是地址,虽然在函数调用结束后(栈区)局部变量的内存会被释放回收掉,但函数返回的是变量拷贝副本。 局部指针: 局部指针分为局部静态指针和局部自动指针,可以返回一个局部静态指针的地址,但不应该返回一个局部自动指针...
局部变量也分局部自动变量和局部静态变量,由于a返回的是值,因此返回一个局部变量是可以的,无论自动还是静态,因为这时候返回的是这个局部变量的值,但不应该返回指向局部自动变量的指针,因为函数调用结束后该局部自动变量被抛弃,这个指针指向一个不再存在的对象,是无意义的。但可以返回指向局部静态变量的指针,因为静态变...
上述代码中,globalInt 可以定义在函数外部或者定义成静态变量,这样在整个程序执行期间都存在,此时返回它的地址是安全合法的。 除了上述整数例子,还可以举例字符串,大家有问题欢迎交流🏪 🎉所以,大家在以后的C/C++编程中一定要记住:不能返回局部变量的指针和引用哦。 0 0 发表评论 发表 作者最近动态 李老师爱学习...
所以,返回局部变量的引用,是万万不可取的,因为这块空间随时可能被其它数据覆盖。此时的指针p便称为野指针。新的数据肯定是有用的,如果通过野指针改变其内容,可能会因为系统异常或程序崩溃。 在程序3中,指针p是指向堆内存,在堆中的内容,必须手动释放,不释放的话,这段内存空间也不会被别的数据占用。 所以,在foo(...
可以看到,不同位的函数的返回值被存的位置。 2函数内部返回局部指针(栈地址)过程 在最开始的未明白return机制前可能还是要纳闷:在子函数中返回一个局部变量,等子函数运行结束时,此局部变量会被释放掉。当在子函数中返回一个指针时,等子函数运行结束时,此地址中的值会被释放掉。有点找不出其中被释放的差别。根...
一个典型的例子就是标准函数 scanf(),它从标准输入流中读入数据,然后将结果放在它的变量中,该变量由调用者提供的指针参数所引用: intvar;scanf("%d",&var); 该函数调用会将字符串当作十进制数读入,然后转换为整数,再将它的值存储在局部变量var 的内存地址上。
而为了保存一个数据在内存中的地址,我们就需要指针变量。 因此:指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量。 在我个人的理解中,可以将指针理解成int整型,只不过它存放的数据是内存地址,而不是普通数据,我们通过这个地址值进行数据的访问,假设它的是p...
使用指针时会频繁进行以下几个操作:定义一个指针变量、把变量地址赋值给指针、访问指针变量中可用地址的值。这些是通过使用一元运算符*来返回位于操作数所指定地址的变量的值。下面的实例涉及到了这些操作: #include <stdio.h> int main() { int var = 20; /* 实际变量的声明 */ ...
在C语言中,可以通过以下几种方式在函数中返回字符指针: 直接返回一个指向字符数组的指针: char* getString() { char str[] = "Hello"; return str; } 复制代码 但是这种方式存在问题,因为函数返回后,局部变量str的内存空间会被释放,导致返回的指针指向无效的内存地址。 使用静态局部变量来返回指针: char* ...