的B[]
阵列仅住当function()
运行时,(它是本地)。返回后它是un-refferenced。
如果您的任务文本被精确引用,看起来好像您将不得不挖掘malloc。然后我就现在说:
原因使用malloc,以下文本:
“Return a new array”
“仅使用阵列和计数器”,而不是第三个参数或重新使用A。
不要因为使用全局数组的诱惑而失败;),你可能被允许使用静态? - (编辑:@Clifford关于为什么没有好点)
祝你好运!
编辑:
另外:你不“获取内存地址,而不是值”。
当function()
被调用时,会给出返回地址。其次,该函数中的本地变量的内存被保留,并且它们的名称被赋予地址。 IE浏览器。例如:
/* assuming 4 byte int */
[ 0xA4 ... 0xAF ] <-- int B[3] -- 3 * 4 = 12 bytes
[ 0xB0 ... 0xB4 ] <-- int i -- 4 bytes
[ 0xB5 ... 0xB9 ] <-- int j -- 4 bytes
[ 0xBA ... 0xBE ] <-- int temp -- 4 bytes
当函数返回时,这些区域被释放。由于没有必要使用电源擦除停留在该处的数据,但在另一个操作使用该区域时可以随时覆盖它。
I.e.从你的代码可能是printf()
或者它可能是完全不同的东西。要点是它不是保留并且可以用于“什么是”。 (不做煎饼,但我想你明白了)。
因此,当您打印func
的值并得到2个正确和一个错误时,这意味着两个第一个尚未被覆盖,而最后一个被另一个调用覆盖。它甚至可以被使用。
上一个值不是地址,而是另一个值被解释为整数。它也不一定是一个整数。如果另一个函数向该区域写入短int或char(最可能是4个字节),则所做的是读取4个字节并将这些位解释为int。
说:
B[2] == 6 (on a 4 bytes, int 32, system)
Address: 0xAC 0xAD 0xAE 0xAF As bit sequence
Value : 6 0 0 0 ==> [0000 0110 0000 0000 0000 0000]
返回到主,fun[2] -> [0xC 0xD 0xE 0xF]
别的地方的函数定义char
(1字节),并获得现在空闲地址0xD
它写入值123那个地址。
现在我们有:
fun[2]:
Address: 0xAC 0xAD 0xAE 0xAF As bit sequence
Value : 6 123 0 0 ==> [0000 0110 0111 1011 0000 0000]
或者,如果我们翻译,一个小端系统上,(像我),为整数,我们得到
+--------- Least significant byte
|
Address: 0xAC 0xAD 0xAE 0xAF
Value : 6 123 0 0 (== 0x06 0x7B 0x00 0x00)
Sort to "human Anglo left right order"
0 0 123 6 => 0x00007B06 == 31494 (int, "normal human number"), and the number
you print when doing the for() loop in
main.
也有可能以及使用的字节类似于
+----- bytes of fun[2]
|
_________+_________
[ ]
char foo 0xAC |
int bar 0xAD 0xAE 0xAF 0xB0
[____+______________]
|
+---- bytes of bar
数字1和2是正确的事实既不保证字节没有被改变。可以将相同的值写入该位置。 0可以写入到int的第2个字节中
胡佛显示:
*作为一个半音符,只有进一步混淆,它可能是地址,但随后该地址的整数表示。事实上,这不是不太可能...它可能是一些行动的回报地址,你可以解释为一个整数。*
希望你至少得到1%。我主动学习自己和解释往往是学习:)
+1对于一个反映和水平的答案。 – Morpfh 2012-03-25 12:49:11