- N +

二維數組c語言例子,c語言二維數組特征

各位老鐵們,大家好,今天由我來為大家分享二維數組c語言例子,以及c語言二維數組特征的相關問題知識,希望對大家有所幫助。如果可以幫助到大家,還望關注收藏下本站,您的支持是我們最大的動力,謝謝大家了哈,下面我們開始吧!

C語言二維數組輸入與輸出

代碼,實現先輸入二維數組的行數m和列數n,并再輸入m*n個整型數據存到動態二維數組中。最后輸出所有二維數組的元素值。

intmain()

{

int**p;//定義二維指針。

intm,n;//行數和列數。

inti,j;

scanf("%d%d",&m,&n);//輸入行數和列數。

if(m<=0||n<=0)return-1;//行數或列數非法。

p=(int**)malloc(sizeof(int*)*m);//申請一組一維指針空間。

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

p<i>=(int*)malloc(sizeof(int)*n);//對于每個一維指針,申請一行數據的空間。

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

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

scanf("%d",&p<i>[j]);//輸入第i行第j列的數據。其中&p<i>[j]也可以寫作p<i>+j或者是*(p+i)+j.功能相同。

printf("輸入的數組為%d行%d列:\n",m,n);

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

{

for(j=0;j<n;j++)//這個循環可以輸出一行元素。

printf("%d",p<i>[j]);//輸出i行j列的元素。

printf("\n");//每行輸入結束加換行符。

}

//釋放內存

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

free(p<i>);

free(p);

return0;

}

擴展資料:

函數:free

功能:與malloc()函數配對使用,釋放malloc函數申請的動態內存。(另:對于free(p)這句語句,如果p是NULL指針,那么free對p無論操作多少次都不會出問題。如果p不是NULL指針,那么free對p連續操作兩次就會導致程序運行錯誤。)

用法;voidfree(void*ptr);

程序例:

C/C++代碼如下:

#include<string.h>

#include<stdio.h>

#include<alloc.h>//or#include<malloc.h>

intmain(void)

{

char*str;

/*allocatememoryforstring*/

str=(char*)malloc(10);

/*copy"Hello"tostring*/

strcpy(str,"Hello");

/*displaystring*/

printf("Stringis%s\n",str);

/*freememory*/

free(str);

str=NULL;

return0;

}

c語言二維數組特征

二維數組跟函數的關系,同一維數組分為兩種情況

1>數組中得元素作為形參(值傳遞)

2>數組名作為形參(地址傳遞也就是指針,這樣可以改變數組的變量值)

注意點同一維數組

應用的話可以作為地圖做迷宮,推箱子,五子棋游戲

c語言,怎樣用程序知道二維數組行數和列數

比如有這樣一個二維數組:inta[3][5];求數組元素的總數:sizeof(a)/sizeof(int)求數組列數:sizeof(a[0])/sizeof(int)而數組行數則為:(sizeof(a)/sizeof(int))/(sizeof(a[0])/sizeof(int))不知道你明白了么?

C語言二維數組,怎么理解

相信題主應該明白C語言中基本數據類型的變量,例如定義一個float型變量:

floata=3.14;

變量a能表示一個數值,但是現實生活中,僅僅使用一個單數值常常是不能完成任務的。更多情況下,需要解決的問題數據類型都是比較復雜的。

一維數組

小明班級有40名同學,現在考試成績出來了,要求我們使用C語言把它們的成績從高到低排出來。要用C語言解決這個問題,首先要用C語言把40名同學的成績表示出來。但是總不可能定義40個變量來存儲各位同學的成績吧?

好在C語言提供了數組語法,我們定義一個score數組用于解決這個問題是非常合適的:

floatscore[40];

score有40個元素,可以表示40個同學的成績。C語言在內存中開辟一塊連續的內存,供score使用,這塊內存的大小等于40*sizeof(float)字節。

二維數組

要是現實生活中,所有問題都這么簡單就好了,那我只要利用C語言的一維數組,就能走遍天下都不怕了。但是事與愿違,哪怕只是一個9宮格,一維數組已經不方便描述它了。

難道要定義3個一維數組來描述這個9宮格?就算可以,要是這個表再大點呢?比如1000行,1000列呢?更進一步的,要是希望我們使用C語言描述笛卡爾二維坐標系,使用一維數組豈不是麻煩死了?

二維坐標系里的坐標怎樣表示方便呢?數學中的表示方法就不錯,橫坐標為a,縱坐標為b的點,寫作(a,b)。

為了表述方便,使用P表示9宮格。如果在P中畫上坐標軸,那每個格子描述起來就方便了,P(0,0)=0,P(0,1)=1,...

那要是C語言也能這么用,表示9宮格就太方便了,對不?實際上,還真可以。請看:

floatpos[9][9];pos[0][0]=0;pos[0][1]=1;

幾乎與用坐標描述一模一樣,這可比用一維數組描述方便多了。類似的,三維數組,四維數組,都有適合使用它們的時候,理解方法也同二維數組相似。

二維數組的內存分配

對于人類來說方便的,死板的計算機不一定也這么認為。實際上,C語言希望“規則”越少越好,它不怕麻煩,就怕“靈活”。

C語言對內存的分配方式,可不會隨著人類認為的“維度”變化而變化。它就一種分配內存的方式,不管你是幾維數組,分配內存統一按照線性劃分。

對于P[1][2],C語言會將其解釋為P[1*3+2]。計算機最恨的就是“動腦”了,能用一維解決,就絕對不用二維。

而我們人類,最喜歡的就是,怎樣方便怎樣來。這也算是人與機器的區別吧。

歡迎在評論區一起討論,質疑。文章都是手打原創,每天最淺顯的介紹C語言、linux等嵌入式開發,喜歡我的文章就關注一波吧,可以看到最新更新和之前的文章哦。

一個二維數組,a和*a有什么區別,C語言

對于二維數組名a和*a,二者的區別在于類型不同。對于TYPEa[M][N];當使用a時,可以等同于二級指針TYPE**型。而使用*a時,等同于TYPE*型。從概念上說,a表示二維數組a的首地址,而*a表示二維數組a第一行a[0]的首地址。這樣在使用的時候就有所區別。

比如對a的操作a[4]表示a的第四行首地址,而對*a的操作(*a)[4]則代表第一行的第4個元素,即a[0][4]。所以a和*a除了值相同外,其它的各方面都是不同的。

OK,本文到此結束,希望對大家有所幫助。

返回列表
上一篇:
下一篇: