第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

2d數(shù)組是雙指針嗎?

2d數(shù)組是雙指針嗎?

C
尚方寶劍之說 2019-06-21 13:10:45
2d數(shù)組是雙指針嗎?int main(){     matrix[2][4] = {{11,22,33,99},{44,55,66,110}};     int **ptr = (int**)matrix;     printf("%d%d",**matrix,*ptr);}但是,當二維數(shù)組作為參數(shù)傳遞時,它被輸入到(*矩陣)[2]中。編譯器將這個數(shù)組存儲為.它是存儲為二維數(shù)組還是雙指針或指向數(shù)組的指針。如果它是作為數(shù)組存儲的,那么在上面這樣的不同情況下,它是如何進行不同的解釋的。請幫我理解。
查看完整描述

3 回答

?
料青山看我應如是

TA貢獻1772條經(jīng)驗 獲得超8個贊

2d數(shù)組是雙指針嗎?

沒有。程序的這一行不正確:

int **ptr = (int**)matrix;

這個答案涉及同一個話題。

如果您想要具體的圖像,那么多維數(shù)組是如何實現(xiàn)的:

多維數(shù)組的規(guī)則與普通數(shù)組沒有什么不同,只是將“內(nèi)部”數(shù)組類型替換為元素類型。數(shù)組項彼此直接存儲在內(nèi)存中:

matrix: 11 22 33 99 44 55 66 110
        -----------               the first element of matrix                    ------------  the second element of matrix

因此,要處理元素matrix[x][y],你帶著the base address of matrix + x*4 + y(4是內(nèi)部數(shù)組大小)。

當數(shù)組傳遞給函數(shù)時,它們會衰減到指向第一個元素的指針。正如你注意到的,這將是int (*)[4]..這個4然后在類型中告訴編譯器內(nèi)部類型的大小,這就是它工作的原因。當對類似的指針執(zhí)行指針算術(shù)時,編譯器會添加元素大小的倍數(shù),因此matrix_ptr[x][y],你得到matrix_ptr + x*4 + y,和上面的完全一樣。

演員ptr=(int**)matrix因此是不正確的。就這一次,*ptr將意味著一個指針值存儲在矩陣的地址,但沒有任何指針值。第二,沒有指向matrix[1]程序記憶中的任何地方。

注:本文中的計算假設sizeof(int)==1,以避免不必要的復雜性。


查看完整回答
反對 回復 2019-06-21
?
滄海一幻覺

TA貢獻1824條經(jīng)驗 獲得超5個贊

沒有。多維數(shù)組是單個內(nèi)存塊。塊的大小是維度的乘積,乘以元素類型的大小,并在每對括號中對其余維度的尺寸乘積將偏移值索引到數(shù)組中。所以.。

int arr[5][3][2];

是一個包含30的數(shù)組。intS.arr[0][0][0]給出第一個,arr[1][0][0]給出第七(偏移3*2)。arr[0][1][0]給出第三個(偏移2)。

數(shù)組衰減到的指針將取決于級別;arr衰變到指向3x2 int數(shù)組的指針,arr[0]衰變到指向2元素int數(shù)組的指針,arr[0][0]衰減到指向int的指針。

但是,您也可以擁有一個指針數(shù)組,并將其視為一個多維數(shù)組-但它需要一些額外的設置,因為您必須將每個指針設置為其數(shù)組。此外,您將丟失有關(guān)數(shù)組中數(shù)組大小的信息(sizeof會給出指針的大小)。另一方面,您可以擁有不同大小的子數(shù)組,并更改指針指向的位置,這對于需要重新調(diào)整大小或重新排列非常有用。這樣的指針數(shù)組可以像多維數(shù)組一樣進行索引,盡管它的分配和排列方式不同,sizeof不會總是以同樣的方式對待它。靜態(tài)分配此設置的示例如下:

int *arr[3];int aa[2] = { 10, 11 }, 
    ab[2] = { 12, 13 }, 
    ac[2] = { 14, 15 };arr[0] = aa;arr[1] = ab;arr[2] = ac;

在這之后,arr[1][0]12..但是沒有給int發(fā)現(xiàn)于1 * 2 * sizeof(int)數(shù)組開始地址的字節(jié)數(shù)。arr,它給了int發(fā)現(xiàn)于0 * sizeof(int)所指向的地址的字節(jié)數(shù)。arr[1]..還有,sizeof(arr[0])等于sizeof(int *)而不是sizeof(int) * 2.


查看完整回答
反對 回復 2019-06-21
?
搖曳的薔薇

TA貢獻1793條經(jīng)驗 獲得超6個贊

在C語言中,沒有什么特別的東西需要你去理解多維數(shù)組。他們的工作方式完全一樣,就好像他們從來沒有被特別提到過一樣。您需要知道的是,您可以創(chuàng)建任何類型的數(shù)組,包括數(shù)組。

所以當你看到:

[2][4];

想想看,“matrix是一個由兩個事物組成的數(shù)組-這些東西是由4個整數(shù)組成的數(shù)組“。適用于數(shù)組的所有正常規(guī)則。例如,matrix可以很容易地衰減為指向其第一個成員的指針,就像任何其他數(shù)組一樣,在這種情況下,這是一個由四個整數(shù)組成的數(shù)組。(當然,它本身也會腐爛。)


查看完整回答
反對 回復 2019-06-21
  • 3 回答
  • 0 關(guān)注
  • 471 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號