c語言中的二維陣列問題,c語言問題 c語言中二維陣列在記憶體中怎樣儲存?

時間 2022-09-12 02:26:01

1樓:

目的是將緩衝區中輸入流中資料清除,可以使用

fflush(stdin);//清除資料

gets函式會把前面在scanf函式的輸入結束符即回車當做第乙個字串資料的結束符接收,因此不加gets(s); 就會導致資料個數少乙個。

當然使用gets(s)會提前接收了回車,因此也是起到同樣的作用。

你程式函式中有個錯誤,

p[i]='\0'; //不是p[i]='\0',應該是p[0]='\0',因為此時i是迴圈後的大值。

而p加了q,已經到了末尾。

這個在你輸入的字元數相等的時候可能發現不了,因為那個'\0'正好加在了下乙個還沒複製的字串後面,相當於提前加了個'\0'。

這個我想可以這樣理解,gets判斷結束時已經是將結束符從緩衝區取出拿來進行判斷也即刪除了緩衝區中的,因此再接著執行gets函式時,緩衝區裡沒東西。

而scanf在格式控制中沒有相應匹配的話對末尾的空格以及換行符不讀,即它們還在stdin緩衝區中。所謂格式控制相應匹配是指,比如:

scanf("%d%c",&m,s); 這個效果是跟加入gets(s)以及fflush(stdin)一樣的,讓s將回車接收掉。

2樓:匿名使用者

不會是為了把回車讀了吧

3樓:

應該是為了先把輸入緩衝區裡過濾掉(清空),防止對後面的輸入產生影響。

至於緩衝區裡有什麼要過濾掉的,舉個例子,如果你輸入m的時候是「5 aljgalng」

那麼輸入緩衝區裡除了所要的資料5被取走外,還有其它不想要的字元所以先過濾掉它們

//個人認為,有不對的請指出

4樓:子夜星空

不是清空資料,是清除緩衝區的回車,不然s[0]是空的,實際的資料是從s[1]開始的

5樓:旮喲旯旯

scanf是通過鍵盤輸入值 這裡是乙個整型資料啊 gets是輸入乙個字串啊 scanf輸入字串要注意有沒空格 一遇到空格則包括空格之後的都無效 gets則能完整接收

6樓:匿名使用者

1.這個程式這麼輸入是很不合理的,因為太多溢位情況.

2.s指向的位址和s[0]指向的位址是一樣的,gets(s)和gets(s[0])所得結果一樣;

3.如果你用 m=10; 代替 scanf("%d",&m); 並去掉gets(s);輸入正常.

4.你可以將

for(i=0;i

gets(s[i]);

改為for(i=0;i

觀察去掉gets(s)前後的變化情況.

6.你可以加一段:

for(i=0;i

觀察實際輸入的字串情況.

要加強除錯程式的能力.其中對輸入原樣輸出,中間結果的輸出,是除錯程式很重要的手段.

7樓:小之股魔

為了設定輸入點,如此而已

8樓:匿名使用者

接受字串~~~從流中取一字串~~~

c語言問題:c語言中二維陣列在記憶體中怎樣儲存?

9樓:匿名使用者

嚴格意義上說不存在copy二維bai陣列,只是陣列裡的每du個元素是乙個一zhi維陣列,而記憶體是一段連續dao的空間,根據你申請乙個變數的順序按位址從低到高排,所以二維陣列不可能像乙個矩陣那樣在記憶體中排列,這就涉及到它是按行依次往下排,還是按列往下排,而在c++中是按行,既 int a[2][2]

a[0][0]

a[0][1]

a[1][0]

a[1][1]

10樓:匿名使用者

嚴格意義上說不存在二維陣列,只是陣列裡的每個元素是乙個一維陣列,而記憶體是

專一段連續的空間屬,根據你申請乙個變數的順序按位址從低到高排,所以二維陣列不可能像乙個矩陣那樣在記憶體中排列,這就涉及到它是按行依次往下排,還是按列往下排,而在c++中是按行,既 int a[2][2]

a[0][0]

a[0][1]

a[1][0]

a[1][1]

11樓:匿名使用者

在c/c++中多維數bai組都是以行的形式連du續地分布在記憶體中的,zhi來個例子dao:

int a[2][2];

則其在記憶體中內

的表現方式為:

a[0][0], 低位址

容a[0][1],

a[1][0],

a[1][1],高位址

12樓:匿名使用者

指向一維陣列的指標陣列。

c語言中二維陣列下標問題

13樓:嘟

a可以理解為二重指標,a[0]理解指標,a[0][0]是對這個位址進行訪問了

。其實回[ ]的意義 可以理解成* 。

a[ i ]其實就相當於*(a+i) 所以原答來的就相當於 *(*(a+i)+j) +的優先順序比 *的高 所以外面那個括號可以去掉 就變成了 **(a+i)+j 。

明白了嗎?

14樓:朱豬丹

這裡a指的是整個陣列,而a[0]指二維陣列第一行的元素,a[0][0]指數組中的第乙個元素。

15樓:匿名使用者

a為二重指標,a[0]是指標,a[0][0]是元素,

16樓:匿名使用者

樓上回答的不錯,頂乙個。

c語言用malloc定義二維陣列問題

17樓:難_再_續

p是乙個指向指標的指標,在上例中,你用malloc函式開闢的一段記憶體賦給了p,簡單的理解,其實p就是乙個陣列(以下我稱為p陣列),不過陣列中存放的都是指標,即p是乙個指標陣列,陣列中存放了5個指向int型的指標,你知道乙個普通的陣列可用它的陣列名進行訪問例如:a[5]就可用*a訪問其第乙個元素。

同理用*p就可訪問p陣列的第乙個元素,*p+1訪問第二個元素,以此類推,而*p中存放的又是乙個指標,所以**p就可以指向乙個整形資料

18樓:匿名使用者

首先要理解

int* ptr = (int*)malloc(5 * sizeof(int)); // 動態分配5個整型的記憶體空間,跟int a[5]相似,但前者是堆上分配的,後者是棧上分配的

p=(int **)malloc(sizeof(int*)*5); // 意思就是定義乙個有5個int型別的指標的動態陣列,然後在裡面存放指標

p[i] 其實就是乙個指標

p[i]=(int *)malloc(sizeof(int)*5); // 給該指標分配記憶體

不知道這樣是否能讓你明白,不明白可追問

19樓:匿名使用者

位址資料就是乙個long型別的資料。一般在32位機上long 和int 佔一樣的空間,都是四個位元組。

指標變數是用來儲存位址的。也就是說,變數的值是個位址值,是個整型數!

因此,指標分配空間按整型型別分配空間就可以了!

關於指標的資料型別,那是為儲存和訪問位址中的資料準備的。

main()}

c語言中二維陣列的定義問題

20樓:匿名使用者

正確寫法如下:

char

fd_jgf1[maxitemlen+1]=;說明:把null去掉

21樓:匿名使用者

1. 二維陣列的第乙個維度預設是:

舉個例子:int tar[2] = ;

因為大括號中有4個元素,而且第二個維度是2,所以就可以計算出來第一維度是2.所以是可以預設的。

2. 你的這個例子中,第一維預設的應該是(7*8+1)/(__maxitermlen__+1) 向上取整。

3. 因為fd_jpf1[i]是乙個一級指標,儲存的是位址,設定為null表示為空。在這裡應該是把它當做這個陣列中有效元素的結束的標誌了。

22樓:孔培勝羅婉

以二維來說,假若給定的陣列為a[3][5],這是乙個二維陣列,在c語言中,計算機在執行這個陣列前,二維陣列就是

a[0][0]

a[0][1]

a[0][2]

a[0][3]

a[0][4]

a[1][0]

a[1][1]

a[1][2]

a[1][3]

a[1][4]

a[2][0]

a[2][1]

a[2][2]

a[2][3]

a[2][4]

不要看我將它排成3行,其實在計算機內部,它是在一行連續排列的,因此a[0]就代表a[0][0],a[1]代表a[0][1],a[4]代表a[0][4],a[5]代表a[1][0],怎麼來不就是行號1*每行的元素個數+0=1*5+0=5;

a[2][2]代表的是2*5+2=12,所以代表a[12].解釋清楚了嗎?

理解了別忘了給我加分(選我)。

c語言二維陣列問題,急!

23樓:金色潛鳥

若陣列已初始化,程式如下。若要自己輸入資料,則寫一下:

for (j=0;j<5;j++) for (i=0;i<5;i++) scanf("%d", &a[j][i]);

同樣的最大值可能有多個,所以用 找出最大值數值,再找位置。

#include

int main()

;int max;

int i,j;

max = a[0][0]; //最大值的初值for (j=0;j<5;j++)

for (i=0;i<5;i++)

if (a[j][i]>max) max=a[j][i];

for (j=0;j<5;j++)

for (i=0;i<5;i++)

return 0;}

C語言問題二維陣列,C語言題目 對二維陣列的正確說明是

include include 這裡假設1行最多100個字元 define maxline 100 int main 開啟檔案,假設在d盤根目錄下 file fp fp fopen d icc1.q7 r if fp null char line maxline 接收檔案資料,以行為單位 int s...

c語言二維陣列指標,C語言二維陣列指標

問題的關鍵是主函式中的指標p的值被修改了,因為 在f r 中,r p 在 f 函式中,s t 相當與 p t 而 t k 所以 p k.那麼主函式中,p k r k。 八千漢字 include int k 7 void f int s int main 三昧離火 b答案是正確的,因為二維陣列名相當於...

c語言排列二維陣列,c語言 排列二維陣列

這個程式演算法很好,但是你沒有想一下,if j 3 這段中j 3是不夠的,因為它有可能與a 3 0 比較,因為a 3 0 未知而出錯。另外,你第乙個for語句中標點錯了。還有乙個錯誤是你查不出來的原因,大括號少了乙個,自己仔細查一下,也可以使用ue32這個程式查一下括號匹配。建議你使用這個程式來寫源...

c語言動態二維指標陣列,c語言動態二維指標陣列

對你的問題有點不懂,你是想說元素都是char型變數,如果是,可以這麼做 char array new char m n m和n的值都可以隨意改變 不知道是不是你想要的 維位址,指向二維陣列第0行位址 0開始計數 第1列 0開始計數 優先順序 所以表示式實際是 p 1 乘以 p 1 1 p指向值為 2...

c語言,指標二維陣列

n是個陣列,已經定義成陣列常量了,陣列的元素型別是指標,元素指標的對應的物件型別是字串,即為字元指標。因為n是陣列名,n不能再賦值 n 等價於返回 n然後n n 1 給n賦值報錯 include int main for i 0 i 3 i system pause return 0 雖然有人回答了...