朋友我只是在玩弄一些指針程序,並意識到GCC(也可能是C標準)區分靜態和動態數組。靜態和動態數組之間的區別
動態數組擁有數組中元素地址的佔位符,而對於靜態數組而言,沒有內存位置,編譯器存儲元素數組的起始地址。
我有一個示例程序來演示我的困惑。
#include <iostream>
#int main(void)
{
int _static[10];
int *_dynamic;
_dynamic = new int [10];
std::cout<<"_static="<<_static<<" &_static="<<&_static<<" &_static[0]="<<&_static[0]<<std::endl;
std::cout<<"_dynamic="<<_dynamic<<" &_dynamic="<<&_dynamic<<" &_dynamic[0]="<<&_dynamic[0]<<std::endl;
return 0;
}
對於上面的程序,_static
和&_static[0]
返回預期線在相同的地址。但是,&_static
也會返回與另外兩個地址相同的地址。
因此,_static
和&_static
指的是相同的號碼(或我們想稱之爲的地址)。正如預期的那樣,_dynamic
和&_dynamic
表示不同的位置。
那麼,爲什麼C標準說_static
和&_static
必須指向相同的位置。這聽起來很混亂。我覺得的一個原因是&_static
沒有多大意義。但是,那麼它的使用不會被報告爲一個錯誤呢?
有人能幫我解決這個困惑嗎?
因爲數組** **衰變到指針。 '_static'衰變爲指向輸出的第一個元素的指針,並且由於不存在對'int *'的重載,就像'char *'(它輸出字符串的地方)一樣,保存在'int *被用來代替。因此'_static'輸出一個指向第一個元素的值,或者'&_static [0]'。 – chris 2012-07-12 04:35:25
你可能會對這篇文章感興趣http://stackoverflow.com/questions/4810664/how-do-i-use-arrays-in-c你可以在這裏學習所有關於數組的知識。 – 2012-07-12 04:36:33
它們在衰變時發出希格斯玻色子嗎? – 2012-07-12 04:36:48