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...