二維陣列,a和a有什麼區別,C語言

2021-03-04 09:01:04 字數 6244 閱讀 3984

1樓:匿名使用者

你可以把二維想象成xy座標。

a在xy座標的角度看待指標的指向的

而*a是在x座標的角度看待指標的指向的

雖然他們都是指向原點

c語言中乙個二維陣列 它的陣列名是a 那a和*a有什麼區別?

2樓:匿名使用者

對於二維陣列名a和*a,二者的區別在於型別不同。

對於type a[m][n];

當使用a時,可以等同於二級指標type **型。

而使用*a時,等同於type*型。

從概念上說,a表示二維陣列a的首位址,而*a表示二維陣列a第一行a[0]的首位址。這樣在使用的時候就有所區別。比如 對a的操作a[4]表示a的第四行首位址,而對*a的操作(*a)[4]則代表第一行的第4個元素,即a[0][4]。

所以a和*a除了值相同外,其它的各方面都是不同的。

3樓:匿名使用者

資料名可以看作指標常量,分配陣列空間時指標值就確定下來了,不像宣告的指標變數那樣,值是不能改變的。*a=a[0],對於二維陣列a[0]也是乙個指標,他們都指向陣列的首位址,值都相等,但是,a和a[0]雖然值相等,但對他們進行指標運算時,位址偏移的基礎不同。

4樓:匿名使用者

其實不大 *a就是a[0]都是第一行的位址

5樓:匿名使用者

有無指標指向的區別。

6樓:匿名使用者

a是這個二維資料首位址,*a是第乙個元素值。

為什麼c語言中二維陣列的陣列名a和*a表示的是同乙個值?

7樓:匿名使用者

當定義二維陣列a[m][n]時,陣列名可以認為是二維指標,其指向二維陣列的首位址。

於是a的值就是首位址的值。

而*a,就是a[0],a[0]是第一行的標記,代表第一行的首位址。

在二維陣列中,所有元素都是緊密排列的,這樣整個陣列的首位址,第一行的首位址,和第乙個元素的首位址,即a, a[0], &a[0][0] 都是相同的。

於是a和*a的值是相同的。

8樓:匿名使用者

當a是二維陣列名時,a即&a[0],而*a即a[0]

兩者的顯式的值是相同的,但是基型別是不同的

9樓:匿名使用者

*a表示陣列的第乙個元素的值,而二維陣列的第乙個元素是乙個一維陣列。這個一維陣列的首位址是a[0],所以a = *a = a[0] = &a[0][0]

10樓:艾珽

首先 a[0] 和 *(a+0)等價,且 a[i]只是乙個位址(如同一維陣列名 只是乙個指標常量)

這些你得知道。

在a[m]中,

a為二維陣列名,值為0行首位址;

a[0] 和 *a 為 0行0列的位址。

*(a[i]+j)和*(*(a+i)+j) 才是 a[i][j]的值。

c語言中的二維陣列裡a+1和*(a+1)為什麼都是位址

11樓:劉文正粉絲

二維陣列, int a[10][20];

a是乙個指標的指標, 即二級指標.

乙個指標加乙個數, 當然還是指標(即a+1是指標)

取值乙個二級指標, 是一級指標(即指標), 所以還是指標, 不過型別發生了變化.

a+1的型別為int *[10].

而*(a+1)的型別則為int *, 也就是平常的指標.

如果你學習二維陣列是用心, 你就會知道不存在二維陣列, 二維陣列其實是乙個包含陣列的陣列, 即陣列的每乙個元素還是乙個陣列(這點有點像物件導向的思維).

所以a[0]就是取第乙個元素值, 而第乙個元素是陣列, 所以其值仍是乙個指標.

答了這麼多, 一看問題, 發現是"位址".....位址和指標是乙個東西.

12樓:zh呼嘯而過

例如a[5][10];

a + 1的值是第二行的首位址,

* (a + 1)得值也是第二行的首位址,但是a + 1不等於a[1],而* (a + 1)等於a[1]。

如果給a+1再加1,就是a+1+1,就是a+2,它的值是第三行的首位址

如果給*(a+1)再加1,就是*(a+1)+1,它的值是第二行的第二個位址

他們移動的區別:前者是縱向的,後者是橫向的。

指標型別的區別:兩者均存放為同一位址,但前者是指向一維陣列,後者是指向元素的。

實際就是前者每次跳動4*10個位元組,後者每次跳動4個位元組。

13樓:twinkleh丶

a+1應該是 (a+0)+1

這裡的a是二維陣列中的二級指標

陣列名為a[0]的一維陣列(表示行)

也是陣列名為a的一維陣列(表示列)

後面的1表示行陣列移動1行

0表示列的移動

所以是1行0列的位址

*(a+1)中a是二級指標

取值二級指標是一級指標

一級指標指向的一維陣列(二維陣列中的行)

一維陣列移動一位只能是向下移動也就是行,

所以就是 第一行的首位址 也就等於二維陣列中 第一行零列的位址

14樓:tlier丿殘刀

二維陣列又包含多個一維陣列 a指向第乙個一維陣列的首位址就還是位址

二維陣列中,*a和*a[0]為什麼不同。

15樓:金色潛鳥

在 c 語言中不是標點符號,而是運算子。

有恆等式: a[i] = *(a+i)

所以,表示式裡, *a[0] = *(*(a+0)) = *(*(a)) = **a.

你的 *a 是乙個星,而 *a[0] 是 2 個 星,當然不同。

------

*a不應該是返回以a 的值作為位址的那個空間的取值嗎 -- 只有 當 a 是1維陣列時才是對的。*a 等於 *(a+0) 等於 a[0];

16樓:匿名使用者

二維陣列中,*a表示二維陣列首位址,*a[0]表示第一行的首位址(即a[0]的首位址,而a[0]又可以說是乙個陣列)

但這兩個位址值是一樣的,不過意義不一樣

17樓:匿名使用者

a[0]本身是個值了,單個a代表位址。如同int a[2]= ;其中 a[0]=1

18樓:哈高妮薩

a[0]等同於同*a。

所以*a[0]等同於**a。

a[0]是第一行元素首位址。

*(*a)等同於*(a[0])等同於*(&a[0][0]),即第一行第乙個元素的值。

c語言 二維陣列 (*(a+1)[1]) 和 *(a+5)分別表達什麼?

19樓:匿名使用者

*(a+1)=a[1]

那麼*(a+1)[1] = a[1][1]

*(a+5) = a[5]

c語言中,a 和a[] 有什麼區別

20樓:泣富貴塔嬋

'a'是乙個字元,"a"是兩個字元,'a'和'\0'

比如,下面這個例子:

char

a1[1]=;

char

a2[1]=;

前者a1[0]='a',能編譯通過

後者編譯通不過,因為a2是乙個元素的陣列,而"a"有兩個元素,分別是'a'和'\0'

補充:'aa'這是錯誤的寫法,單引號是字元的引號,它只能引乙個字元的"aa"這是正確的寫法,雙引號是字串的引號,它有三個字元:'a','a','\0'

21樓:路溫柴倩

1、本質區別

雙引號裡面的是字串,

而單引號裡面的代表字元。

2、輸出區別

str=

「a」輸出的就是a這個字母;

str=

『a』輸出的測試65

3、底層區別

用單引號引起的乙個字元實際上代表乙個整數,整數值對應於該字元在編譯器採用的字符集中的序列值。

擴充套件資料:

c語言是乙個有結構化程式設計、具有變數作用域(variablescope)以及遞迴功能的過程式語言。

c語言傳遞引數均是以值傳遞(pass

byvalue),另外也可以傳遞指標(a

pointer

passed

byvalue)。

不同的變數型別可以用結構體(struct)組合在一起。

只有32個保留字(reserved

keywords),使變數、函式命名有更多彈性。

部份的變數型別可以轉換,例如整型和字元型變數。

通過指標(pointer),c語言可以容易的對儲存器進行低階控制。

預編譯處理(preprocessor)讓c語言的編譯更具有彈性。

22樓:新來的文盲

a比a少一維,我具體給你解釋下。

幾個元素可以組成陣列,而幾個一維陣列可以組成二維陣列,如此一直增加維數。

比如說a[0]=2,a[1]=1,a[2]=3,組成乙個一維陣列,這就是a.但是,你要注意,a不是直接把這些東西都存著的,a只存首位址。

假設定義了乙個二維陣列a[3][3].這時候a[0],a[1],a[2]就不再是元素了,而代表的是乙個有三個元素的一位陣列,而此時的a就是乙個二維陣列。如果感覺這個有點困難沒關係,等學習了指標什麼的久很好理解這個了。

再說說你給的程式,你是不是在疑問為什麼gets()直接給str1 就可以了?還有那個輸出函式,為啥只用給str1就可以?

這得給儲存方式有關,字串就是字元的二維陣列,gets()需要輸入字串的首位址,這個還算好理解,因為你應該學過了scanf()了,二者差不多,關鍵是為什麼輸出函式直接就寫了str1呢?printf()之前你學的一般都是(printf("%d",a[1]));這種型別的。這裡為啥要填乙個位址引數呢?

這是因為你前面是%s s代表字串,字串本身就是二維的,因此,你當然不能只給他乙個單獨的元素了,那麼,你給了首位址他如何知道你這個字串是啥呢?因為字串都是順序儲存的,更重要的是字串在結尾處有個標誌「/0」,因此,你只要給力他首位址,他就知道從**開始,從**結束了。

純手打,望採納。

23樓:司空曼華郎霜

引號引起來說明是字元。

不因起來說明是變數名。

printf("%c",a);

printf("%d",'a');比較兩者的區別。

上面是a的變數內容。

而下面是a的ascii碼,97.

24樓:樊成仵辰

在c語言中,

1.單引號是字元的意思:『a』,a就是乙個字元;

2.雙引號就是

字串的意思:」abd「就是乙個字串。

25樓:鄞蘭英裔嫻

定界符不同,字元常量用的是單直撇,字串常量則用雙引號長度也不同,字元常量只能有乙個字元,也就是說字元常量長度為一,而字串常量可為0,也可為任意數。即使字串常量字元數量為一,長度也不是一。

例如,字串常量"h"(這手機沒雙引號)

則長度為2,字元就是h\0

26樓:匿名使用者

an和a的區別,用法區別

27樓:匿名使用者

char str1[5]; //表示定義了乙個字元陣列,即可以對應儲存str1[0]-str1[4]個字元

gets(str1);//單獨使用了str1,str1是陣列的名稱,代表了陣列的起始位址,呼叫gets()函式時引數應該是位址值str1

printf("%s\n",str1);// 輸出格式控制為%s,表示輸出字串,如果要輸出乙個連續的字串,後面應該使用位址str1;如果格式控制字為%c,表示輸出單個字元,這時候就應該是str1[0]或其他

28樓:匿名使用者

char str1[5]; 表示聲名乙個陣列,其長度為5(也就是所它最多能容納5個char型元素)

gets(str1);獲取使用者的輸出,注意不要超過4個字元,否則就會陣列越界。其中的str1其實就是陣列的位址。gets的函式原型為char *gets(char *s);其功能就是將使用者的輸入存入str1的陣列中。

printf("%s\n",str1);將str1中的內容列印出來。

int a[5]表示聲名乙個陣列。而a就是這個陣列的位址(也是陣列第乙個元素的位址)。

關於c語言二維陣列的問題,C語言中二維陣列的定義問題

a是乙個一維陣列,陣列裡的值是指標,指向的還是一維陣列。即等價於,int x 2 2,0 int y 2 4,8 int a 2 x,y 我想你應該知道答案了。c語言中二維陣列的定義問題 正確寫法如下 char fd jgf1 maxitemlen 1 說明 把null去掉 1.二維陣列的第乙個維度...

C語言二維陣列問題

a代表陣列的首位址,a 0 代表這個二維陣列第一行的首位址,雖然這兩個位址值是一樣的 int p a表示p是指向int型別的指標a是乙個二維陣列,其指標指向的是一維陣列,一維陣列才指向的是int,因此得用兩重指標表示 int p a int p 4 a 定義的是乙個有4個元素的int陣列的指標,而a...

c語言二維陣列a4中表示什麼,C語言二維陣列a4中,表示什麼

表示這是乙個二維陣列,第一維度上有4行,每行有 不確定的第二維度數值,具體理解 形如,a 0 0 a 0 1 a 0 2 a 0 x x大小未知 a 1 0 a 1 1,a 1 2 a 1 x a 2 0 a 2 1,a 2 2 a 1 x a 3 0 a 3 1,a 3 2 a 1 x 其中由於x...