结论:普通的变量(非new的变量)都是系统自动分配的,在栈空间(连续分配),无需程序员操作,速度快,但是...空间有限,不适合大量数据,大量的话就需要自己new new出来的变量是处于大容量的堆空间,分配方式可能类似与链表,当然,速度会慢 在主函数中,如果定义的数组较大,所需空间较大,大概是10的6次方那么多,可能会出错,因为函数内部申请的局部变量,来自于系统的栈空空间,空间可能不够 局部变量中的a数组,在栈中分配了空间,存了0,1,2等数据,函数结束后,返回的地址也确实给了main函数中的p变…
所谓指针函数其实就是  :一个函数的返回值为指针. 指针函数定义:返回类型标识符*  函数名(形参列表){函数体} eg:   int*  fun1(int n){} 指针函数和局部变量返回解析: 简单例子 #include<stdio.h> #include <unistd.h> int* fun1(int n); int main(void){ ; int *p_sum=fun1(n); printf("%d",*p_sum); //结果5050 sleep…
一般的来说,函数是可以返回局部变量的. 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了.因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错.但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错.因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错.准确的来说,函数不能通过返回指向栈内存的指针(注意这里指的是栈,返回指向堆内存的指针是可以的). 下面以函数返回局部变量的指针举几个典型的例子来说明:…
在编写c/c++代码时,调用函数的书写让程序变得整洁易读,但是调用函数的返回值(局部变量的返回值,变量,结构体,数组等)也有注意事项.c/c++严禁返回局部变量的指针或引用. 其实函数的返回值的规则非常好记: 函数的返回值可以是数值和全局变量的指针或引用. 函数的返回值不能是局部对象或者是局部变量的指针或引用!!! 原因: 调用函数的局部变量是存在于栈中的,在执行完调用函数之后会将局部变量的空间释放,也就是调用函数执行后局部变量将不存在与内存中.如果返回的是局部变量的指针或者是引用.返回给接收对…
来源:http://blog.csdn.net/haiwil/article/details/6691854/ 一般的来说,函数是可以返回局部变量的. 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了.因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错.但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错.因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错.准确的来说,函数不能通过返回指向栈内存…
一般的来说,函数是可以返回局部变量的. 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了.因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错.但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错.因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错.准确的来说,函数不能通过返回指向栈内存的指针(注意这里指的是栈,返回指向堆内存的指针是可以的). 下面以函数返回局部变量的指针举几个典型的例子来说明:…
返回局部变量没问题 如果返回局部变量有问题,函数的意义还有吗? 全局变量还用返回吗?  返回指向局部变量的指针才有问题, 函数退栈之后,局部变量消失, 指针将指向未知区域,所以出现问题.   返回局部变量的引用也是绝对不可以的. 引用只是变量的一个别名,变量本体都不存在了,引用当然也没有任何意义. 还有,如果是堆空间,可以返回,即在函数中用new申请的空间,是可以返回的. 但是一般的情况下,好的风格是: 尽量在同一个作用域内成对使用new   和delete,(也即不要返回堆空间),因为如果不是…
Free函数的参数一定要是malloc返回的那个指针   之前认为只要free的参数在malloc分配的区域之内就可以了, 现在发现不对的.在嵌入式里分配堆都是按照块来的,只要在这个块内系统就能识别,也就能正常free.现在看来vc中的free函数要求必须是malloc返回的那个指针,即可用数据区的首地址. 个人总结 在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用——就是malloc然后free就一切OK了.…
本篇笔记记录的是关于返回函数中的局部值. 我们知道,在函数中创建的局部变量会随着函数的调用过程的结束,也即其对应函数栈帧的清除,而结束其生命周期.那么,如果我们把这个局部变量返回,就有可能存在该变量对应的数据已经清除,而发生错误.所以,我们在返回值的时候一定要注意.那到底详细的情况是怎么样的呢?先上结论:对于在函数中定义的局部变量,如果是以指针或者引用的形式返回,那么将产生错误的结果.如果是以传值的方式返回,那么将没问题,因为返回的是对象的副本,它在函数结束之后仍然存在.关于创建副本这个问题,现…
函数不能返回指向栈内存的指针 原因:返回值是拷贝值,局部变量的作用域为函数内部,函数执行结束,栈上的局部变量会销毁,内存释放. 可返回的局部变量: 1. 返回局部变量本身 int sum(int a, int b) { int s=a+b; return s; } 2.常量: char* returnValue() { char* str="HelloJacky"; return str; } char * str=“hello world”字符串常量,不能str[1]='a'. 常量…