当returnStr函数退出时,栈要清空,局部变量的内存也被清空了,所以这时的函数返回的是一个已被释放的内存地址,所以有可能打印出来的是乱码。 3、返回普通值 intfunc() {inta; ...returna;//允许}int*func() {inta; ...return&a;//无意义,不应该这样做} 直接返回a,返回的是值,结果存储在临时变量中;返回&...
局部变量分为局部自动变量和局部静态变量,无论自动还是静态,返回局部变量都是没有问题的,因为返回值不是地址,虽然在函数调用结束后(栈区)局部变量的内存会被释放回收掉,但函数返回的是变量拷贝副本。 局部指针: 局部指针分为局部静态指针和局部自动指针,可以返回一个局部静态指针的地址,但不应该返回一个局部自动指针...
当然可以,只是,这里不行。 这里的地址是一个局部变量 str 的地址,我们都知道,局部变量是存储在栈里的,当函数执行时,其中的局部变量会执行压栈操作,但是,当函数执行完毕后,栈中的数据会弹出,以便腾出栈空间。 所以,当函数执行完毕后,指针指向的地址当然是存在的,只是它指向的数据已经不在了。 真的是这样吗? ...
当用类一个对象去初始化另一个对象时。 如果函数形参是类对象。 如果函数返回值是类对象,函数执行完成返回调用时。 请看下面的例子: #include <stdio.h> #include <unistd.h> #include <iostream> class A { public: A() { std::cout << "A Constructor" << std::endl; } A(const A&) { std::...
当子函数返回变量的地址“0x7ffec3c04294”赋给主函数的指针变量pn后,主函数的指针pn打印的不是局部变量的地址“0x7ffec3c04294”,而是(nil),这是因为子函数返回地址后num就自动释放掉了,所以主函数里面指针pn所打印的地址就出错了。如果指针pn还继续对局部变量地址对应的内存进行赋值,这时pn所指向的是野指针了...
一般的来说,函数是可以返回局部变量的。局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指...
c语言函数返回局部变量地址。 2. 分析 c语言函数是不能返回局部变量地址(特指存放于栈区的局部变量地址),除非是局部静态变量地址,字符串常量地址、动态分配地址。其原因是一般局部变量的作用域只在函数内,其存储位置在栈区中,当程序调用完函数后,局部变量会随此函数一起被释放。其地址指向的内容不...
返回int不会warning,是因为函数的返回机制是将返回的值存储到寄存器中,控制权回到调用函数时,调用函数从寄存器中取得函数返回的int,函数执行完毕其中局部作用域的变量所占内存已被释放返回一个具有局部作用于的字符串的指针,当函数执行结束时,函数中为变量分配的内存已被释放,此时字符串已经不存在,其占用的内存已经被释...
这里的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) ...
返回了一个局部变量的指针,而恰好局部变量偏偏又在函数结束后销毁,但指针并没有被销毁,而是被返回,那也就是说,指针指向的正是一个被销毁了的对象。 比如下面的代码: #include<stdio.h>char*returnStr(){charp[] ="hello world!";returnp; }intmain(){char* str; ...