在C语言中,局部变量的作用域只在函数内部,在函数返回后,局部变量的内存就会被释放。如果函数只是返回局部变量,那么这个局部变量会被复制一份传回被调用处。但是如果函数返回的是局部变量的地址,那么就会报错,因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放,这样指针指向的内容就是不可预料的内容,程序就...
int、char等数据类型的局部变量可以作为函数返回值。 在函数中声明的指针可以作为函数返回值。指针可以是执行int等数据类型的指针,也可以是指向结构体的指针。 在函数中声明的结构体也可以作为函数返回值。 在函数中声明的数组不能作为函数返回值。 函数中的局部变量的内存地址不能作为函数返回值。 代码 对上面的每条...
int、char等数据类型的局部变量可以作为函数返回值。 在函数中声明的指针可以作为函数返回值。指针可以是执行int等数据类型的指针,也可以是指向结构体的指针。 在函数中声明的结构体也可以作为函数返回值。 在函数中声明的数组不能作为函数返回值。 函数中的局部变量的内存地址不能作为函数返回值。 代码 对上面的每条...
n,此时形参 n 的值变为 30。形参 n 也是局部变量,所以就使用它了。func3() 输出 10,使用的是全局变量,因为在 func3() 中不存在局部变量 n,所以编译器只能到函数外部,也就是全局作用域中去寻找变量 n。main() 中 printf() 语句输出 30,说明使用的是 main() 中的 n,而不是外部的 n。
当然不一样,上面的函数返回的是一个具体值,但是这个函数但会的是一个地址,那么,函数不可以返回地址吗?当然可以,只是,这里不行。 这里的地址是一个局部变量 str 的地址,我们都知道,局部变量是存储在栈里的,当函数执行时,其中的局部变量会执行压栈操作,但是,当函数执行完毕后,栈中的数据会弹出,以便腾出栈空间。
一般的来说,函数是可以返回局部变量的。局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指...
c[10]和*pStr均保存在栈中;该函数返回值是保存在pStr指针中的c数组在栈中的存放地址,当调用该函数时,该地址被复制到外部的指针变量中,然后,保存在栈上的c[]数组和pStr指针的内存空间被释放。c[]数组的存放地址是被传送出去了的,但是,由于c[]是局部变量, 在函数执行完成后,存放的内存空间就被释放,所以,在...
一般来说,在函数内对于存在栈上的局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错;但是如果返回的是局部变量的地址(指针)的话,就造成了野指针,程序运行会出错,因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样...
有返回值的话,那么在主函数或者其他调用函数肯定有这样的表示 ...=glist_reverse(glist_t g);所以你的返回的是一个指针值,然后把这个值赋值给等号左边的那个量 而自定义函数里的所有东西自动释放掉,这跟局部变量没有冲突的。楼主细想一下是不是···...