求問個c語言問題,為什麼二維陣列做引數引用時,陣列要填下標

2021-04-15 12:27:06 字數 3147 閱讀 3885

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