lz还是看书去吧 &numbers得到的不是一个有效的左值,所以不能被赋值
你需要再学点基础知识
http://en.wikipedia.org/wiki/Value_%28computer_science%29
回 楼主(拜拜) 的帖子
风怒了…… 没人吐槽那个odd函数么 这代码看着不好吐槽啊,这个有点不合c语言的精神啊 没人吐槽返回栈地址吗 我本来不想看的看了2分钟,觉得思维已经进入八奇领域了。。。LZ得回炉重炼了
出了odd和odds与分号的问题之外
你最大的问题是那个function在return local variable的地址
好好想想当一个function call完后local variable会怎样吧 太多槽点。。。。不知如何吐起。。。。
我本来以为楼主的问题会和process对应的虚拟的内存地址和实际的物理内存地址有关。。。结果是这个。。。 改成 void odds(int* y) 一眼看下去怀疑这是不是c,拉到下面看回复觉得这应该是c,然后就无法吐槽了 数组变量里存的是首元素地址,相当于一个门牌号,局部变量返回以后就相当于拆迁了,你拿着个门牌号还有什么用
找本好点的书看看,别这么乱试了,这样写出来的东西就算能运行也奇葩得根本不能看 int *odds(void)
你函数返回的是一个数组,类似于指针,离开作用域就是销毁的
但static修饰后变成全局对象,作用域被扩大
如果你学的是C++,内置数组是不推荐用的
如果是C,那慢慢和这玩意打交道。。。 在之前已经很多人指出问题了,结果楼主13楼还是问了一遍,估计是没看懂别人说什么 内存位置就是地址,
但是栈上地址中的内容不是一直有效的,栈内存会在不同的函数间重用.
返回一个栈地址的通常后果就是得到一个指向无效内容的野指针(如果原内容物是对象的话,通常已经析构掉).
还没有理解指针的话,最好不要滥用这个玩意.个人估计90%的崩溃和bug都是指针带来的. 引用第17楼拜拜于2012-10-05 11:06发表的:
如果返回的不是指针,那么就不算动态变量了?就不会销毁了对吗
比如这样,没加static也没销毁,正常返回了x
#include <stdio.h>
....... images/back.gif
你返回的不是x,而是x的一个副本
函数的返回值用于初始化在调用函数处创建的临时对象。在求解表达式时,如果需要一个地方储存其运算结果,编译器会创建一个没有命名的对象,这就是临时对象。在英语中,C++ 程序员通常用 temporary 这个术语来代替 temporary object。
用函数返回值初始化临时对象与用实参初始化形参的方法是一样的。如果返回类型不是引用,在调用函数的地方会将函数返回值复制给临时对象。当函数返回非引用类型时,其返回值既可以是局部对象,也可以是求解表达式的结果。
页:
[1]