1樓:劉文正粉絲
不清楚你學指標沒,如果學了這個問題就好說了.二維陣列是一個二級指標,而一維陣列就是版一個普通的指標權.二維陣列其實也是一維的,只是它的一個元素還是一個陣列.
而一維陣列要得到一個元素可以這樣:*(p+i) 這樣是完全等價於p[i]的.而二維陣列想要得到它其中的一個元素就要這樣:
int i[10][3];
i[1][2] == *(i + 10*1 + 2);
但如果說這個陣列是int i[10][30];就不能通用上面的公式,所以如果得到一個二維陣列的元素就要由型別來定.如上**,i是一個int *[3]型別的.
2樓:匿名使用者
比如一維bai陣列作函式du引數時:f(int a[10]) 會被轉換成f(int *a),zhi即傳遞過去dao的是一維陣列內的首地址。所以即容使你有個陣列 int b[5],也能傳遞進int [10]做引數的函式。
二維陣列作函式引數時:f(int a[10][5]) 後面的那個維數會被丟棄,轉換為,f(int (*a)[10]),
之所以要保留除了第一維以外的維數,是因為int (*a)[10]是一個指向10個int組成的陣列的指標,而不是int* 指標。
這個很難理解的,你必須把指標學好,很多入門的c語言書上會有解釋,想一下就懂是不可能的,慢慢理解。
3樓:寧靜の樂章
二維陣列做形參時可以省略第一個維度,第二個不能省
4樓:蕢廣英計淑
a可以理解為二重
指標,a[0]理解指標,a[0][0]是對這個地址進行訪問了。
其實內[
]的意義
容可以理解成*。a[
i]其實就相當於*(a+i)
所以原來的就相當於
*(*(a+i)+j)
+的優先順序比
*的高所以外面那個括號可以去掉
就變成了
**(a+i)+j
。明白了嗎?
2、 c語言題目:陣列在「定義」時和「引用」時所帶的下標有何區別
5樓:匿名使用者
定義時 下標 表示 這個陣列的 總的元素個數。
就是總大小。
引用時候 下標是個 標記。
用scanf("%s") 不能輸入空格的。
gets() 可以
6樓:匿名使用者
定義時指的是元素的個數n,而引用的時候是單個元素,0~(n-1).
使用getline()
7樓:須密夔飛翼
type
a[19];
type
*a=&a[10];
於是,a成為一個下標為-9~9的type型陣列這東西純粹娛樂用,你剛開始學還是離這些東西遠一點
c語言,二維陣列的下標問題問題 10
8樓:008列出
前者可定義的前bai提是給出了全部或部分du元素的zhi值,如arr[100]=,這個時候由於定dao義了列回數,系統會自動在第100個數
答之後換行,而arr[100]=的話就之定義了行數,至於第一行在何處換行就不知道了,因為列寬不知道。
c語言中二維陣列下標問題
9樓:嘟
a可以理解為二重指標,a[0]理解指標,a[0][0]是對這個地址進行訪問了
。其實回[ ]的意義 可以理解成* 。
a[ i ]其實就相當於*(a+i) 所以原答來的就相當於 *(*(a+i)+j) +的優先順序比 *的高 所以外面那個括號可以去掉 就變成了 **(a+i)+j 。
明白了嗎?
10樓:朱豬丹
這裡a指的是整個陣列,而a[0]指二維陣列第一行的元素,a[0][0]指陣列中的第一個元素。
11樓:匿名使用者
a為二重指標,a[0]是指標,a[0][0]是元素,
12樓:匿名使用者
樓上回答的不錯,頂一個。
為什麼在c語言中二維陣列第二維下標可以越界?
13樓:匿名使用者
因為陣列是連續儲存的,所以a[0][3]就是第四個儲存的資料,你可以試試a[0][4]..
14樓:匿名使用者
越界復是肯定的,但是越界不代表程
制序會出
bai錯,你這個地方越界du後訪問的正好是下一個元素4,是zhi一個dao有效值,所以不會出錯。可以試試訪問a[3][3],這個時候不一定會訪問到什麼東西,這時就很容易出現記憶體破壞,會提示記憶體不可訪問之類的吧
15樓:匿名使用者
不是能越界,c中陣列時從0開始算起的。你是a[3][3],想要顯示對應元素時,就應做相應變換,例版如顯示權
第2行第3列元素(即6),就要寫printf("%d ",a[1][2]);,你寫a[0][3]按照3維陣列來說,沒有這個元素,這時c語言內的編譯器就自動把這個三維陣列預設成一個一維陣列,他顯示的是這個以為陣列的第4個數,即4
16樓:幻夢の初
相當於一維陣列的第四個元素
哥們,往大了試,a[0][9]你試試
17樓:大心星
假設這個陣列是連續記憶體的話,第二個下標越界第一個不越界,那這個內地址還是有可能落在這個二維數容組的記憶體範圍內的,但是你第一維最後元素的第二維下標越界試試? 那就跑出這個陣列的記憶體範圍了,誰這麼明確告訴你可以越界了?
int a[5][5];
a[5][6]=0;
這麼寫或許編譯不報錯,但是你修改了莫名其妙地址上的資料,要麼崩潰要麼出錯...這樣是不可取的
c語言二維陣列下標表示方法
18樓:匿名使用者
下標就是在裡的,他是重0開頭的。具體表示如下:
int a[5];//5代表a最後個陣列裡的元素個數
是初學者吧! 要努力喲!
19樓:匿名使用者
int n;
float a[n][n];
都是從0開始到n-1
c語言二維陣列
因為你的s是一個二維陣列。如果你的s是一維陣列,像s 20 這樣,那麼在gets時不需要加 0 你定義的s是個二維陣列,並且是char型別,所以每一行存放一個字串。s n 代表第n 1行,而gets時的引數需要是一個字串指標,或者字串陣列名,所以這裡必須要寫作gets s n 其中0 n 20 我明...
c語言求二維陣列的和的寫法問題,c語言求二維陣列的和的一個寫法問題
這樣寫,格式有點小錯誤。以下幫你加了幾個中括號,希望採納!note your choice is c ide include stdio.h void main for i 0 i 2 i for j 0 j 2 j if a i j max max a i j printf d,d,d n sum...
c語言中二維陣列的定義問題C語言中二維陣列的定義問題
正確寫法如下 char fd jgf1 maxitemlen 1 說明 把null去掉 1.二維陣列的第一個維度預設是 舉個例子 int tar 2 因為大括號中有4個元素,而且第二個維度是2,所以就可以計算出來第一維度是2.所以是可以預設的。2.你的這個例子中,第一維預設的應該是 7 8 1 ma...