一出生就跌入千元行列,全面屏手機時代的話語權與耍流氓

時間 2021-05-30 21:17:15

1樓:鄧毅

這個其實沒啥道理,C就是這麼規定的。

`int_array`是個陣列變數,所以它其實不是乙個指標,而是棧一段長度為三個 int 的連續位址空間。

但是 C 語言規定了 int_array 作為值引用的時候,表示的是這段空間的首位址。

&int_array C 也定義了它是合法的,取值也只能是這段連續空間的首位址(還能是什麼呢?)。

int_array[0],是陣列 int_array 的第乙個元素,它的位址當然還是這段空間的首位址。

如果 p 是乙個指標,則 p[x] 是 *(p + x),這使得 2 和 4 沒有衝突。

需要注意的是,如果 p 是乙個指標,比如 int*,&p 和 p在型別上和數值上都是不等的。p 是乙個占用 8 或 16 個位元組(可以還有別的,取決於編譯器的型別)空間,這個空間中存了另一端記憶體的位址。 &p 是乙個指標的指標(int**),指向 p 這個變數自身的位址。

2樓:

#include

void test(){}

int main(int argc, char **argv)out:

0x40057d

0x40057d

3樓:呵呵一笑百媚生

其實我覺得嚴格來說&int_array[0]跟&int_array相同是合理的,而int_array 的值也跟前面兩個相同,這更像是強加的語言規定,或者說……語法糖。

可能很多C/C++教程都會強調陣列名稱的值等於陣列首元素的位址,所以就習慣了int_array==&int_array[0]這種現象,並沒有覺得有什麼問題。

考慮「int a」這樣乙個定義,這裡得到了乙個符號「a」和一塊4位元組的記憶體。那麼這塊記憶體的首位址怎麼表示呢?自然地,寫作「&a」。

然後再考慮「int int_array[3]」這樣乙個定義,這裡得到了乙個符號「int_array」和一塊12位元組的記憶體。那麼這塊記憶體的首位址又怎麼表示呢?自然地,寫作「&int_array」。

而如果把這塊12個位元組的記憶體看做連續的三小塊4位元組的記憶體的話,那麼第乙個小塊的首位址「&int_array[0]」也就是整個大塊的首位址「&int_array」了。

所以int_array的值等於&int_array或&int_array[0]是怎麼回事?剛查了一下,發現C標準裡面就這麼強制規定了。至於為什麼要這麼規定,那可能就是來自於下面這個語法糖了:

int_array[i]==*(int_array+i)。

更多關於這個問題的細節,參考stackoverflow上的In C, are arrays pointers or used as pointers?

4樓:Sunchy321

我舉個例子:

|--a[0]--|--a[1]--|--a[2]--|a記憶體裡是這個樣子,而你使用的(我估計是你能見到的所有)編譯器使用物件的第乙個位元組來記這個物件,於是

&a[0]:0xDEADBEEF

&a :0xDEADBEEF

它們的記憶體布局居然是一樣的!(廢話)

然後輸出,%p屁顛屁顛地把這些東西解釋成void*,那麼得到的這兩個值自然也是一樣的。輸出結果也就一樣了。

實際上這種知識似乎沒啥卵用。。

為什麼海豚一出生就會游泳,馬一出生就會走路,而人類什麼都不會?

或許 人類區別於其他動物有乙個為直立行走 正因為要直立行走,女性的盆骨會變小,那麼他們生的胎兒就不會太大,否則生育的風險就更大了,那麼想讓胎兒變小,其實其實並沒有什麼特別神奇的方法,就是提前生出來 所以人類其實都是早產兒,故我們一出生並沒有馬等等那樣的行為 參見 人類簡史 村頭二柱子 因為人類幼崽還...

人生際遇是否一出生就注定了?根據出生時間來看。

楊豐紫微斗數命理 人生際遇確實是一出生就已經注定了的!但是重要的是但是 但是,並不是說,人的 命運 是注定的!原因如下 舉個例子 乙個人,駕駛這一葉扁舟,在海面上行使。什麼是注定的?海面上的風浪情況,這是注定的。我們無法改變,只能被動的去承受!但是,掌舵的人是我們自己。決定向前還是向後,向左還是向右...

如果孩子一出生就有父母的經驗和記憶,幾千年後,這個世界會成什麼樣子?

如果父親被判入獄20年,但在入獄3個月後兒子出生了,這個孩子要不要也服刑20年?如果父親是個死刑犯,留下乙個遺腹子,這孩子又該怎麼處理?如果孩子出生便帶有父母的記憶的話,意味著知識和觀念都可以被繼承,一代兩代可能不是問題,幾代過後,這種巨大的個體差異便會越來越大。關於過去的認知就不再是聽聞,而可以是...