各位老鐵們,大家好,今天由我來為大家分享二維數組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,本文到此結束,希望對大家有所幫助。