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

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

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);}但是,當(dāng)二維數(shù)組作為參數(shù)傳遞時(shí),它被輸入到(*矩陣)[2]中。編譯器將這個(gè)數(shù)組存儲為.它是存儲為二維數(shù)組還是雙指針或指向數(shù)組的指針。如果它是作為數(shù)組存儲的,那么在上面這樣的不同情況下,它是如何進(jìn)行不同的解釋的。請幫我理解。
查看完整描述

3 回答

?
料青山看我應(yīng)如是

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊

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

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

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

這個(gè)答案涉及同一個(gè)話題。

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

多維數(shù)組的規(guī)則與普通數(shù)組沒有什么不同,只是將“內(nèi)部”數(shù)組類型替換為元素類型。數(shù)組項(xiàng)彼此直接存儲在內(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ù)組大小)。

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

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

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


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

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊

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

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

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

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

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

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.


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

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊

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

所以當(dāng)你看到:

[2][4];

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


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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