关于函数的一些个问题 求教高人!

来源:百度知道 编辑:UC知道 时间:2024/05/29 20:43:20
一、刚看了个帖子 居然没看懂 如下
c++函数通过什么方式传递返回值?
悬赏分:5 - 提问时间2007-5-18 11:28 问题为何被关闭
当一个函数返回指针类型时,对返回表达式有什么要求?
提问者: 纯邪清风 - 见习魔法师 二级 答复 共 1 条
回答::返回的只要是指针变量就OK啊.不过注意不要返回栈内存,比如
char *foo()
{
char p[]="哈哈";
return p;
}
这样在后面用到这个返回值时就会出错,因为函数返回时p指向的内存已经释放

他这里怎么看出来“哈哈”是用得栈内存啊??? 是不是要想成功就要加个静态变量,静态变量是不是就为了干这种事的??
二、函数返回值要不要占用系统内存呢?比如:(我就简单写了啊)
int get()
{return n}
最后这个函数是把N的指针传回去了 还是又为这个函数分配了个内存存进n去了呢 还是返回时直接把n的值赋给你所需要的主函数中的那个变量了
三、当函数结束时 是不是包括形参在内和函数内定义的各变量占用的空间都被释放了啊

最近重学C++ 真的感觉有些迷糊了 望高手解答
还有就是我怎么知道 程序中分配内存时是用得堆内存还是栈内存或者其他的 有什么分类和规律没啊

new 或malloc
分配的都是堆内存,其它,如int a;
char b;等都是栈内存

char p[]="哈哈";

这种写法是定义了一个字符串 , 字符串用 "哈哈" 初始化

个人理解: 凡在{}里面定义的变量 都是位于栈上的 , 出了{}就会被收回无法被外面的代码访问。。

堆内存一般是 malloc , new 申请到的。