二維陣列名為什麼不能直接賦值給二級指標。

時間 2023-02-14 00:25:05

1樓:匿名使用者

二維陣列名相當於指標,但是它是一個指向陣列型別(也就是整型或者字元型,具體取決於你陣列的定義)。而二級指標在真正意義上也是一個指標,但它是一個指向指標的指標。

在定址時,拿整型陣列舉例,直接引用陣列名,系統會在陣列名指向的地址往後定址2個位元組得到一個整型數字。而引用二級指標時,系統會在指標指向的地址後定址4個位元組得到一個地址,所以兩個不能相互賦值。

純手打,求採納啊。

二維陣列名不能賦值給二級指標- -

2樓:網友

我理解你的問題是不是這樣:int a[3][4]; int**p = a;為什麼會報錯是吧?

a指向一維的int陣列,記憶體大小為sizeof(int)*陣列長度;

而p只是指向一個int*型別指標,記憶體大小為4。指標指向的型別實際是不同的。

這裡你可能又有疑惑,為啥int b[10]一維陣列就可以賦值給int* pb = b呢,這是因為陣列退化到指標,只有第一維的陣列可以不確定陣列長度,可以直接作為首地址。有「陣列名能否作為右值」的討論。

如果想實現指標賦值,可以這樣int(*p)[4] =a;

這樣定義你就可以理解,p是一個指標,指向int[4]一維陣列。

二維陣列名為什麼不能給二級指標賦值

c語言中二維陣列名能否直接賦給指標變數

3樓:匿名使用者

二維陣列的指標與指標的指標是不一樣的。

所以int **ppr;

int fool[2][3];

ppr = fool;

這樣是不行的。

二維數回組的指標必須。

答限定第一維的大小。

所以:int (*ppr)[3];

ppr = fool;

這樣才可以。

4樓:匿名使用者

可以,但所宣告的指標型別是指向指標的指標如:

int a[3][3];

int** array_ptr=a;

5樓:匿名使用者

可以,二維陣列名本身就是表示一個陣列的首地址。

6樓:手機使用者

可以,陣列名是陣列首元素的地址。

二維陣列名與二級指標有什麼區別?

7樓:匿名使用者

實際上它們是沒有任何關係的,那個賦值也不應該通過。以下的解答建立在一定程度的腦補上,實際上這段**問題相當多。

a的記憶體佈局如下:

p[0]結果是一個int*,它的大小湊巧和int相同。p[0]湊巧讀到了a[0][0],所以輸出1。

a[0]結果是一個int*,但是它是由int[3]退化而來,編譯器實際上輸出的是&a[0][0]。

換句話說,p假裝指向的是一個陣列而把那一段記憶體解釋成指標(就像一個int陣列一樣)。

8樓:匿名使用者

網頁連結 這個帖子很詳細。

求助,為什麼直接把陣列元素的地址賦予二級指標,二級指標不是隻能儲存一級指標的地址嗎

9樓:匿名使用者

1全部不要被二級一級概念給影響,本質上他們都是指標,指標存放的是地址。

那麼把陣列元素的地址賦值給二級指標,本質就是把地址賦值給指標,這樣編譯器就不會錯誤。明白?所謂的二級存放一級指的是我們編寫**時的邏輯,編譯器並不懂。

10樓:抱飼養員大腿的奇一

char **p, *name =

//這裡**p是二重指標,*name是存放一重指標的陣列//而我們知道,例如*a是可以表示a的入口//同理**a可以表示*a的入口。

//所以**p和*name型別是一樣的,並不是你理解的把陣列元素的地址賦值給二重指標。

二維陣列和二級指標

11樓:折柳成萌

通過二級指標去訪問二維陣列需要先給二級指標分配等同於二維陣列行數的一維陣列指標,然後把二維陣列的每行首地址賦值給對應位置的一維指標上。之後就可以通過二維指標直接訪問了。

參考**如下,可以看具體註釋輔助理解。

#include //輸入輸出標頭檔案。#include //本程式需要用到malloc/free函式,引用該標頭檔案。int main();定義二維陣列a,並賦值從1-12.

int **p = null;//定義二維指標。 int i, j; p = int **malloc(sizeof(int *)3);/要訪問的陣列有三行,所以申請三個一維指標變數。 for(i = 0; i < 3; i ++for(i = 0; i < 3; i ++free(p);/釋放申請的記憶體。

return 0;}

可以直接用陣列名賦值給指標嗎

12樓:笑年

正確,在c/c++中,陣列名都代表字串的首地址。

13樓:樂在雲霄

可以。f既是陣列名,也是陣列的首地址,而指標的本質就是一個地址。

二維陣列名代表什麼

豔陽高照的午後 二維陣列本質上是以陣列作為陣列元素的陣列,即 陣列的陣列 二維陣列定義 型別說明符 陣列名 常量表示式 常量表示式 例如 float a 3 4 b 5 10 定義a為3 4 3行4列 的陣列,b為5 10 5行10列 的陣列。注意,不能寫成 float a 3,4 b 5,10 二...

c 裡一維陣列名,是個指標,那二維陣列名呢

如果把陣列名當作引數傳遞給函式時,那麼編譯器將認為傳遞的是指標。在函式中同樣可以操作該指標,訪問陣列元素,不管它是多少維陣列。比如 int iarray 10 void f1 int p1 如果這樣呼叫f1 iarray 那麼p1 0 等於iarray 0 p1 1 等於iarray 1 以此類推 ...

c中如何向二維陣列整行賦值,C 中如何向二維陣列整行賦值?

tn瓶邪 方法是在一對大括號中,使用一個以逗號分隔的資料項列表。清單2 30宣告瞭一個字串陣列,然後在一對大括號中指定了9種不同的程式語言的名稱。宣告陣列的同時進行賦值 string languages 在這個以逗號分隔的列表中,第一項成為陣列的第一個元素,第二項成為第二個元素,依此類推。我們使用大...