1樓:笑清風
&a[0]與a[0]與該陣列的首地址相同。
a[3][4]這個二維陣列表示的3行4列邏輯排列如下:
a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
a[2][0] a[2][1] a[2][2] a[2][3]
除錯程式的執行結果證明,&a[0]與a[0]的值是一樣的。
2樓:匿名使用者
a[0]指的是a[0][0]至a[0][3]的內容&a[0]指的是a[0]的首地址
一個是明確的某型別陣列
一個是地址
c語言指標:一個二維陣列a[3][4],為什麼*a會表示&a[0][0]呢?不是【a表示&a[0]
3樓:匿名使用者
*a表示第0行第0列地址,a既是陣列名,也是第0行的首地址;a[0]表示第0行0列的地址,*是取物件,&是取地址,*a[0]才表示值
4樓:貝蠡
*a預設為第0行第0列地址
c語言中,例如一個二維陣列a[3][4],則a與a[0]代表的意思一樣嗎?a與*a呢?我在書上看它 5
5樓:阿
因為第一個例子是整數型別,每一個a[x][x]代表確切的值。a就是a[0][0],a[0]其實也是a[0][0],所以是相等的。
再說第二個例子:
定義個字串陣列,其中每個字串最多有10個字元(說道這裡應該明白為什麼是錯的了吧?),你定義的char *p只是一個單字元指標,卻企圖將str代表的整條字串的地址傳遞給p,這顯然是不正確的。個人容納不了組織,組織卻能容納個人,就是這個道理。
打好基礎,不著急,慢慢來。
6樓:匿名使用者
str 相當於指向指標的指標
p是指標
所以二者不同
7樓:匿名使用者
上一句初始化方式不對
c語言大神進 c語言中,例如一個二維陣列a[3][4],則a與a[0]代表的意思一樣嗎?a
8樓:匿名使用者
char *p是一維的, str是2維的,p=str,二者不匹配。str[0]是一維的,與p同型別。
a與a[0]只是在使用a的首地址這個值時意義才一樣。
a是地址,*a是取a這個地址中儲存的一個byte.[看數值型別,如果是整數,則是取整數]
9樓:匿名使用者
題主還是不理解指標。
char str[10]=,*p;
這個定義裡str相當於一個二維指標,而p是一維指標。
二維陣列在記憶體中按行儲存,所以可以說整個二維陣列包含兩個一維陣列,也就是兩行,第0行是「ok」,第一行是「good」。 "ok"和"good"的首地址分別為(一維指標)str[0]和str[1],str[0]只是指向二維陣列第一行的(一維)指標,而str是指向整個二維陣列的(二維)指標,所以,p和str[0]都是一維字元型指標,賦值是沒問題的,但是p=str;是不對的。
c語言中陣列a[3][4]={{0,0,0,0}}和a[3][4]={0}是什麼意思?有何區別?請說詳細點。
10樓:匿名使用者
a[3][4]=} 表示定義一個3行4列陣列,並將開始的一行4個元素清零
a[3][4]= 表示定義一個3行4列陣列,並將所有元素清零
11樓:匿名使用者
沒有區別,只是寫法不同而已。都表示3行4列共12元素。{}裡德值是對陣列裡德元素一一賦值,數值不夠的就是0,0已省略。。應該能懂吧?
12樓:滄海雄風
前者把第一行4個全部初始化為0 第二第三行還是未初始化的隨機數字
後者全部初始化為0
在c語言中,二維陣列a[3][4]中,&(a+1)表示什麼?
13樓:景
表示第a[1]行的首元素地址
14樓:匿名使用者
a[3][0]的地址
求問c語言大神: int a[3][4] 那麼a,*a,&a是什麼型別?有什麼區別?
15樓:it圈新鮮事
a是指陣列的首地址,是個地址值;
*a是陣列第一個位置的元素值,是陣列中的數值;
&a不能用於取陣列的地址,本身a就是地址了,不能再次取地址,否則得到的值是錯誤的。但是可以取變數的地址。
16樓:匿名使用者
二維陣列陣列名為陣列指標.
所以a型別為 int (*)[4]
*a就是a[0], 型別為int, 等效於const int *&a是二維陣列指標. 型別為 int (*)[3][4];
17樓:自我程式設計
陣列bai
元素地址是連續的
dua是表示二維陣列的zhi首地址,其值相dao當於專 &a[0][0] 本身是常量指標 不能改變屬其值。
*a是行的首地址 也就是&a[0] 如果你把(*a)+1 那麼值就是 &a[1]
&a值和a一樣,但意義不同,
a表示陣列首地址,a+1就變成第二個元素地址(int 每個元素地址相隔4)
&a表示整個陣列,&a+1就直接跳過整個陣列的記憶體地址空間(相當於跳過了 4*元素個數的地址)
你可以用sizeof(a) 和sizeof(&a) 檢視記憶體大小就知道了
c語言 二維陣列a【0】與a與a【0】【0】有什麼區別?
18樓:匿名使用者
陣列在記憶體中是連續按行分佈的,對於a[2][3]=,};它在記憶體中的分散式1,2,3,4,5,6;所以他等價於a[2][3]=;在c/c++中,陣列名也即是陣列首地址,這裡加入a=0x1000;那麼它的地址分就是也就取第一個元素的地址,即1000,a[0]是第一行1000,1004,1008的首地址,也是1000,也即是a元素的首地址;
int *b=a[0];
*b和a[0]是等的,是a陣列第一行首地址;不同的是a[0]是隻讀的,*b是可讀寫的因為b是指標變數,你可以試試a[0][3],a[0][4],a[0][5]都能列印出來,別看a[2][3]以為這樣越界了,其實越不越界是按地址來算的,地址上講,&a[0][3]=a[1],所以完全沒問題;按照地址計算上面列印的值就是4,5,6;同理用*(b+3),*(b+4),*(b+5)也是一樣的道理;
a就是陣列的首地址,a[0]是第一行第一個元素的首地址,也即是a的首地址,&a[0]是第一行的首地址,從數值上將,沒問題,只是資料型別上不一樣;
a[0][0]就是取第一行第一個元素的值,也即是1
19樓:匿名使用者
a[0][0]是值,a[0]和a是地址
在c語言裡面,&a[0]++和&a[0]+1分別表示什麼意思?
20樓:
&a[0]++;是錯誤語句,編譯都不會過。因為++是後++,在執行該語句時是不計算的,所以a[0]++是個表示式而不是值,顯然用&取一個表示式的地址是非法操作!而如果是&++a[0];則是正確的,因為前++在執行&時已經計算過了:
就是先給a[0]+1,然後再取a[0]的地址。
&a[0]+1;是正確語句,因為&的優先順序比+高,所以是先取a[0]的地址再給這個地址+一個元素所佔位元組數——就是說&a[0]+1是a[1]的地址。
21樓:匿名使用者
&a[0]++表示程式執行時會對執行結果自加1
&a[0]+1表示程式執行時對結果加上1,如果改為2就會加上2
22樓:一輩子朋中
他們的結果一樣,都是a[0]的地址加一
23樓:百度使用者
a[0]表示陣列a 的第一個元素,
&a[0]是取a[0]在記憶體中的地址
&a[0]++是將a[0]在記憶體中的地址向前移動一個單位.
理論上&a[0]+1和&a[0]++的執行效果是差不多的
24樓:匿名使用者
不一樣!
++的優先順序比&高,&比+高!
所以&a[0]++是進行a[0]=a[0]+1之後,在取a[0]的地址
而&a[0]+1是先取a[0]的地址,然後將指向這個地址的指標(假設int *p;p=&a[0];)移動一個資料長度,即指向了a[1];
&a[0]++
就是&a[0]+1就是
25樓:匿名使用者
這要看你要說的是
一維陣列還是二維陣列了,如果是一維,答案同atchoo,要補充的是,向前移動的是陣列資料型別所佔的記憶體空間,比如是int,就移動2個單元;如果是二維,
a[0]表示第一行首地址,&a[0]表示第一行第一列首地址,&a[0]++就是把第一行第一列的元素加1.
26樓:匿名使用者
有人說a = a + 1;比a++;慢,但現在的編譯器結果是一樣的.
27樓:信培勝戊衣
編譯錯誤如下,都是取得陣列a的第二個元素的地址&a[0]++與&(a[0]++)等價:6,無法編譯通過,不能取得地址;
表示a[0]++不是一個左值:
non-lvalue
inunary
`&'.cpp:
main。
而&a[0]+1與a+1和&a[1]是等價的
c語言中的陣列裡的數字如何和字元聯絡起來
c語言中,字元型別char和整數型別在儲存資料的格式上是相同的,都是採用補碼存版儲資料。所不同的是,權char只有一個位元組,而int資料有四個位元組。一個位元組表示的有符號數範圍為 128 127,四位元組表示的有符號數範圍為 2 31 2 31 1.因此,若想定義一個陣列,既能儲存char型別,...
C語言程式設計,多種方法求陣列裡的最大值和最小值
因為只是找出最大最小值,直接迴圈每個比較一次就可以。include 挑選法 define n 10 void main int a n m,n,i for i 0 im n a 0 for i 1 ia i n a i printf 最大值 d,最小值 d n m,n include 排序法 def...
c語言裡和的區別,C語言中, 和 有什麼區別, 和 有什麼區別
表示 與 意思是條件必須同時成立 表示 或 意思是條件有一個成立即可.if a a b b c c b b c c a a c c a a b b 這個是判斷銳角三角形的條件,你只要學過數學就應該知道銳角三角形的成立條件是 任意兩邊長度的平方和大於第三邊長度的平方。所以要用 而不是 因為if a a...