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

2022-06-07 22:00:14 字數 5222 閱讀 4811

1樓:匿名使用者

如果把陣列名當作引數傳遞給函式時,那麼編譯器將認為傳遞的是指標。在函式中同樣可以操作該指標,訪問陣列元素,不管它是多少維陣列。比如:

int iarray[10];

void f1(int *p1);

如果這樣呼叫f1(iarray),那麼p1[0]等於iarray[0],p1[1]等於iarray[1]......以此類推

int iarray[10][10];

void f2(int *p2);

如果這樣呼叫f2((int *)iarray),那麼p2[0]等於iarray[0][0],p2[1]等於iarray[0][1],...,p2[10]等於iarray[1][0],...以此類推

2樓:

double a[10][10];

function(a[10]);

function(a[10][10]);

3樓:

二維陣列就是型別 ** 比如 int ** char **

4樓:匿名使用者

可以用指標,跟一維用法一樣.

c++二維陣列名指的是陣列的首地址嗎? 40

5樓:祿學校寄藍

是的,你可以試試看,

比如int

arr[4][4]=;

cout<<(arr

==&arr[0][0]);

//比較一下陣列名和陣列第一個元素地址的值比較一下,看是不是相等

6樓:匿名使用者

陣列名所代表的資料型別是指標常量,二維陣列就是指標的指標——二重指標,二重指標所存的內容就是一重指標的地址。所以二維陣列代表的是二重指標常量,所儲存的內容是「一重指標們」的首地址即第一個一重指標的地址

7樓:匿名使用者

是的,比如二維陣列a[m][n],陣列名a是陣列的首地址,它相當於a[0],也就是第一行的首地址,主意在二維陣列中a[0] a[1]...都是地址

8樓:匿名使用者

可以這麼用,但是多維陣列理解起來要麻煩一些

9樓:一生何求

答:二維陣列名是陣列的首地址

1、眾所周知一維陣列名代表陣列的首地址

2、那麼二維陣列名是否代表二維陣列的首地址呢?答案是肯定的,因為二維陣列的本質是一維陣列,它在記憶體中的儲存也是按照一維陣列的方式儲存的。所以陣列名始終代表陣列的首地址。

3、我們可以程式設計取地址確認是否正確.答案輸出yes。

int main()

如果c++;cout<<"yes"<

return 0;}

10樓:匿名使用者

不是,你可以用指標的形式

指向指標的指標和二維陣列名等同嗎?

11樓:匿名使用者

int a[2][3]; a的型別相當於 int (*)[3]而不是int **

int a[2][3];

int (*b)[3] = a; 這是可以的

---int *p[3];

陣列型別變數參與運算的時候視為指標。運算時的p[0],這裡是指標的運算子,陣列型別不會直接參與運算。 p[0]就是 *(p + 0) 也就是*p 顯然p可以看成int **型別的

---只有運算的時候 int *才是int **,宣告的時候int *p[3]和int **p是不一樣的。int **p是一個指標的空間,裡面存的資料是int **,int *q[3]是3個指標空間裡面存的資料是int *。

p用的時候是直接使用它儲存的資料,q在用的時候使用的是宣告的變數的首地址,因為那個地址儲存的資料是int *所以地址的型別也就是int **。

p: |(int **)|

q: |(int *)|(int *)|(int *)|

陣列在運算時候轉意為指標,但是陣列變數本身不等於指標。p你可以用int **賦值,但是q不可以,因為q轉意得到的int **並不是儲存在變數裡的。

12樓:

int *p[2];

int *q[3];

int **z;

p = q;// 錯誤

盯住這個錯誤不放,應該能夠理解你所說的問題那個 z ,就更沒譜了 ^_^

為何二維陣列的陣列名是指標的指標?

13樓:匿名使用者

是指標的指標,例如

int **a;

a[i]的內容就是一維陣列指標

a[i][j]就是一維陣列指標中的元素

這樣想不是很合理麼?

c語言中的二維陣列名是一個二重指標嗎?

14樓:

應該不是的,簡單來說,陣列名,不管是多少維度的都是採用名稱**表相應的存放地址。雖然二重指標也是存放資料的地址但是其是間接的存放。就打個比方,二重指標就如一個廠家有好多貨要賣出去。

而自己又沒有銷售渠道,只好通過**商來提貨,通過分銷商來賣給消費者;二維陣列就如廠家有貨而且自己有渠道直接銷往消費者。 不知這樣說是否容易理解。

15樓:瀚漠

不是二級指標p也可以解釋為指標的指標,即p內儲存的值實際上還是一個指標,計算:

*p的值實際上是一個指標值,那麼 *(*p)即二級指標指向的最終值

對於二維陣列a[2][2],a也是一個地址,並且這個值也等於a[0],也等於a[0[0]的地址,即&a[0][0],由此看來對a取地址的值是一個變數值(不是指標),所以a並不是一個二級指標,最多算一個一級指標。

16樓:匿名使用者

1、二維陣列名不是二級指標,它只是一個比較特殊的常量指標。包括三維,四維,乃至n維陣列也是如此。只要是陣列,那麼它就是一個普通的常量指標。

2、二級指標p也可以解釋為指標的指標,即p內儲存的值實際上還是一個指標,計算:

*p的值實際上是一個指標值,那麼 *(*p)即二級指標指向的最終值。

對於二維陣列a[2][2],a也是一個地址,並且這個值也等於a[0],也等於a[0[0]的地址,即&a[0][0],由此看來對a取地址的值是一個變數值(不是指標),所以a並不是一個二級指標,最多算一個一級指標。

c語言中二維陣列名是不是可以看作指標陣列名?

17樓:安心播音

不可以,二維陣列要看做「陣列的陣列」。

(以如下定義為例:int a[4]; int * p;)給你個對於指標和陣列的正確理解吧:

定義的不同:c 裡,指標和陣列是不同的型別,不要把陣列名看做「常指標」。所以 sizeof(a) 和 sizeof(p) 值是不同的。

操作:除宣告外,中括號操作符僅用於指標,如 p[0],p[5] 等。當使用 a 時,要看做 (int*)a 。

比如 a[0] 要看做 ((int*)a)[0] , *a 要看成 *(int*)a 。(除 sizeof 以及類似操作以外)

所謂的「二維陣列」,「二級指標」,「指標陣列」,以及「陣列指標」的理解應該為:

基礎型別為陣列的陣列,

基礎型別為指標的指標,

基礎型別為指標的陣列,

基礎型別為陣列的指標。

比如二維陣列定義為 int b[3][4]; ,可以看做:

typedef int a[4];

a b[3];

其它類推。

18樓:

二維陣列的名稱就是指標的指標, 對於一維陣列,它的陣列名,就是它存放記憶體的首地址

19樓:匿名使用者

例如:二維陣列名是一個指標,但是說它是常量的意思是它本身不可更改:如你定義int a[34][3],a確實是個指標,*a指向陣列中第一個整數;但是你不能通過a++操作使在此操作後a指向陣列中第二個整數,而普通指標(int a[12];int *b=a;b 就是普通指標)可以這麼操作的,所以說它是「指標常量」;

c++指標與多維陣列問題

20樓:扈懷煒

其實二維陣列名是一個陣列指標,那什麼是陣列指標?陣列指標是指向一個陣列首地址的指標,它實際上也是一種指標型別,類似於函式指標。所以不能把一個陣列指標直接複製給一個指標。

21樓:匿名使用者

二維陣列可能是指向指標的指標,所以你要強制轉換一下才可以。

也就是p是int *型別的,但a的話是int **型別的。所以你可能要寫為p=(int *)a;就可以了。

或者你也可以寫為p=a[0];

c++中怎麼通過指向二維陣列的指標給二維陣列賦值

22樓:老馮文庫

一、二維陣列與二級指標

二維陣列

二維陣列本質上是以陣列作為陣列元素的陣列,即「陣列的陣列」。二維陣列的相當於由若干個一維陣列組成的一級陣列。

int a[3][4];

此時的a是一個二維陣列,a[0]、a[1]、a[2]均表示一個一維陣列,它們三個元素共同組成一個一維陣列a(元素是一維陣列)。也就是說二維陣列a是由若干個一維陣列元素(a[0]、a[1]、a[2])組成的一維陣列。

int a[3][4]=,,}

設陣列a的首地址為1000,各下標變數的首地址及其值如圖所示。

無論是一維陣列還是二維陣列,陣列名均表示陣列的首地址。

2. 二級指標

指向指標的指標稱為二級指標,即二級指標不是指向一個普通變數,而是指向一個指標。如int **p,*p並不表示一個變數的值,而是另一個指標。

二、二級指標指向二維陣列

int a[3][4];

此時的a即是一個二級指標,*a指向二維陣列的首地址(也是a[0]的首地址),*(a+1)指向a[1]的首地址,*(a+2)指向a[2]的首地址。*(*(a+0) + 1)表示元素a[0][1],*(*(a+i)+j)表示元素a[i][j]。

三、應用舉例

#include

void main()

, , };

for(int i=0; i<3; i++)

printf("\n");}}

四、執行測試

0   1  2  3

4  5  6   7

8   9  10  11

c語言中二維陣列行指標是什麼,C語言中二維陣列行指標是什麼

就是指向每一行的指標,比如說二維陣列a 2 3 a 0 代表的是二維陣列第零行的首地址相當於 a 0 0 a 1 代表的是二維陣列第一行的首地址相當於 a 1 0 a 0 1代表的是二維陣列第零行,第一列的地址相當於 a 0 1 行指標其實就是二級指標,也就是說它指向一個一維陣列,int a 2 3...

怎麼定義二維動態陣列,怎麼定義一個二維動態陣列

public double culcofv int ysize,int nsize 用new申請空間 再在對每個數進行初始化 動態定義和初始化二維陣列 部分 cout 輸入二維陣列的行,列 cin row col int p2 p2 new int row for i 0 i row i p2 i ...

c語言中c11的意思c是二維陣列

從0起算,c 1 1 是第1行的第1個元素的值。即若有陣列c 3 3 則 c 1 1 5,也就是c 1 1 的值。你應該是沒把指標定義二維數 組的那一小節沒弄清楚 a i p i 一個二維陣列可以看成是以一維陣列為元素構造成的一維陣列,二維陣列可以看成一維陣列,只不過該一維陣列的每個元素又是一個一維...