C語言陣列問題

2022-11-13 01:45:23 字數 2791 閱讀 6534

1樓:匿名使用者

退格換行吧

為了陣列輸出是5行5列啊 陣列是從a[0]開始記的 所以到a[4]就有5個了

2樓:卑教

程式中i控制行,j控制列,5行5列的矩陣,要在j=4時換行,if(j%5==4)的意思是當j除以5的餘數為4時,執行後面的語句。

3樓:李少傑噢

在這裡(j%5)==4等價於j===4

4樓:匿名使用者

j從0開始數,數到4就剛好是5個數了。

5樓:匿名使用者

當j%5=4的時候,j=9+n+=4;

6樓:匿名使用者

先給你介紹一些本人的經驗,然後再分析題目吧,這樣比較容易看懂一些。

在進行指標的運算時,最好不要用語言去描術他,因為容易出錯,而且不容易理解,最好是把它轉換為數學的方式,通過計算得出最後的答案,那樣才是正確可靠的。比如像你這例的pp[0][1]如果用數學方式運算,只需一行就搞定,如果用語言表達,就要彎過來彎過去,還不好理解,還容易理解錯誤。

1、兩條基本準則:

a、首先要明白,指標運算子的作用,我用一言以概之,你在**使用都不會錯。指標運算子*的作用是求出*後面所指地址裡的值。因此只要*後面的變數表示的是一個地址就可以使用*運算子,來求出這個地址中的值,你不用管這個地址的表示形式是怎樣的,只要是地址就可以使用*來求出地址中的值。

b、[ ]這個運算子的的運演算法則是,把左側的地址加上[ ]內的偏移量然後再求指標運算,注意有[ ]運算子的地方就有個隱含的指標,比如x[2]表示的就是將指標x偏移2個單位量後再求指標運算。也就說x[2]與*(x+2)是相等的。

對二維陣列的指標和[ ]的混合運算,假設b是二維陣列b[3][4]

在下面的指標和[ ]的混合計算中,要記住兩點關鍵法則,記住了這兩點在**計算都不會出錯

a、對於像b[1]這樣的地址,最好應表示為&b[1][0]再進行偏移計算,比如對於b[1]+1,這不是直接在對b[1]加1,也就是b[1]+1不等於b[2],因為b[1]表示的是第二行行1個元素的地址,對其加1,應該表示的是第二行第二個元素的地址,也就是&b[1][1],而b[2]則表示的是第二行第一個元素的地址,因此錯誤,所以在計算時應把b[1]轉換為&b[1][0]之後,才能直接進行地址的偏移,也就是說b[1]+1=&b[1][0]+1=&b[1][1],這樣才能得到正確的結果,並且不會出錯。

b、對於有小括號的地方,一定不要省略小括號。比如(&b[1])[1]與&b[1][1]將表示的是不同的結果,第二個是顯然的,對於第一個可以看到,表示的是第3行第1個元素的地址,因此這兩個的結果是顯然不一樣的。因此對於(b+1)[1]這樣的運算,不能省略小括號,即(b+1)[1]=如果省略了小括號,則是(b+1)[1]=&b[1][1],這將是不易發現的錯誤。

因此這是兩個完完全全不同的符案。

c、總結,指標和[ ]混合運算2點關鍵,

第1:應把是地址的[ ]運算,轉換為地址的形式,比如b[1]應轉換為&b[1][0]。因為只有這樣才能進行直接的地址相加運算,即&b[1][0]+1=&b[1][1],而b[1]+1不等於b[2]。

第2:有小括號的地方不能省略小括號,如(b+1)[1]=也&b[1][1]是完全不同的。

答案a:正確,因為雙重指標pp指向的是p也就是說pp=p是與pp=&p[0]等價的,因此pp[0]=*(pp+0)用文字表述就是pp[0]是表示指標pp所指向的地址的值,因為pp指向的地址是&p[0],這個地址裡的值就是p[0],也就是p[0]所指向的地址,也就是&a[0],因此pp[0]=&a[0],那麼用文字表達就是,把a[0]的地址偏移一個單位之後得到的地址,也就是&a[1],然後再對這個地址求值,也就是得到a[1]的值,同理pp[1][1]就等同其中p[1]=&a[4]是在for迴圈中得到的,因此就得到pp[1][1]=(&a[4])[1]=a[5]的值,你可以把陣列a賦與12個值來驗證本人的計算。

答案b:很明顯是正確的,不作解釋

答案c:錯誤:因為p[3][1]=*(p[3]+1);在這裡可以很明顯的看到,指標陣列最大的下標只有2,沒有p[3]所以是錯誤的。

即,你定義的時候是int *p[3],所以沒有p[3]這個值,p[3]陣列溢位。

答案d:正確因此是正確的,用文字表達就是,把指標陣列p的首地址偏移兩個單位,也就得到了是p[2]的地址,即&p[2]。

然後求出偏移了這兩個單位地址的值,也就是p[2],p[2]就是&a[8]的地址,p[2]指向的地址在for迴圈中計算得到的,然後再對p[2]所指向的地址偏移兩個單位,這樣就得到&a[10]的地址,然後再求出這個地址中的值,因此就是a[10]

7樓:匿名使用者

%是求餘操作符,上面的就是說當 j為4的時候,這時候一行已經輸出了,0到4共五個數字了,所以要換行了.

因為 j 等於4 所以 j%5的結果就4.所以條件滿足,就回車換行了..

求求操作符說明:0%5 得0,1%5得1,5%5得0 ,6%5得1,7%5得2,10%5得0.

現在你明白了嗎?

C語言陣列相加,關於c語言的兩陣列相加問題

m str j str strlen str j 1 rem 改成m str j 0 str strlen str j 1 0 rem 或m str j 48 str strlen str j 1 48 rem 就行了 字元型的數字換成整形的減掉 0 就可以 也就是減48 include stdio...

C語言程式指標陣列的問題

首先程式存在一個錯誤if max其次 max a,單提陣列名錶示的是陣列第一個元素的地址,所以此處表示指標指向陣列的第一個元素,如果 max的值變了,那麼陣列第一個元素對應的值也相應改變 max a 0 表示指標指向的單元儲存的內容被賦值為a 0 所對應的整數值,max改變並不影響a 0 所儲存的值...

關於c語言動態陣列,關於C語言動態陣列

採納我吧,給你費了好大勁啊 include include include const int maxsize 100 templateclass linlist template class node template node node linlist entry entry template ...