C語言中
創(chuàng)新互聯(lián)專注于華州企業(yè)網(wǎng)站建設,響應式網(wǎng)站開發(fā),商城網(wǎng)站定制開發(fā)。華州網(wǎng)站建設公司,為華州等地區(qū)提供建站服務。全流程按需開發(fā)網(wǎng)站,專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務
指針做函數(shù)參數(shù)傳遞二維數(shù)組有兩種基本方法:1、傳遞“數(shù)組指針”pre
t="code"
l="cpp"#include
stdio.h
void
output(
int
(*pa)[3],
int
n
)//這個函數(shù)只能輸出n行3列的二維數(shù)組
{
int
i,j;
for(
i=0;in;i++
){
for(
j=0;j3;j++
)
printf("%d
",
pa[i][j]
);
printf("\n");
}
}
void
main()
{
int
a[2][3]={
{1,2,3},
{4,5,6}
};
output(a,2);
}2、傳遞“指針數(shù)組”
先將二維數(shù)組的行指針存儲到一個指針數(shù)組中,再將指針數(shù)組傳遞到子函數(shù)中去。pre
t="code"
l="cpp"#include
stdio.h
void
output(
int
*pa[],
int
row,int
col
)
//這個函數(shù)更通用,但調(diào)用前,要做好準備工作。
{
int
i,j;
for(
i=0;irow;i++
){
for(
j=0;jcol;j++
)
printf("%d
",
pa[i][j]
);
printf("\n");
}
}
void
main()
{
int
a[2][3]={
{1,2,3},
{4,5,6}
};
int
i;
int
*pa[2];
for(
i=0;i2;i++
)
pa[i]=a[i];
output(pa,
2,
3);
}
C語言中,如何手動輸入二維數(shù)組?c語言的數(shù)組是非常重要的內(nèi)容,特別是二維數(shù)組的內(nèi)容,所以今天就由小編來為大家介紹c語言怎么創(chuàng)建一個二維數(shù)組。
工具原料c語言電腦
方法/步驟分步閱讀
1
/6
第一首先在電腦上打開c語言編程軟件。
然后創(chuàng)建項目。
2
/6
第二然后導入stdio.h和stdlib包。
再加入malloc包。
3
/6
第三然后定義五個參數(shù)。
再創(chuàng)建其中兩個參數(shù)的空間。
4
/6
第四然后用for語句進行循環(huán)。
再用scanf語句進行接收輸入到二維數(shù)組。。
5
/6
第五然后用兩個for語言循環(huán)。
再輸出二維數(shù)組的數(shù)值。
6
/6
第六然后用printf語句進行數(shù)據(jù)輸出分格。
這樣一個二維數(shù)組就創(chuàng)建成功了。
注意事項
個人經(jīng)驗,僅供參考。
內(nèi)容僅供參考并受版權保護
擴展內(nèi)容:
二維數(shù)組:
二維數(shù)組本質(zhì)上是以數(shù)組作為數(shù)組元素的數(shù)組,即“數(shù)組的數(shù)組”,類型說明符 數(shù)組名[常量表達式][常量表達式]。二維數(shù)組又稱為矩陣,行列數(shù)相等的矩陣稱為方陣。對稱矩陣a[i][j] = a[j][i],對角矩陣:n階方陣主對角線外都是零元素。
二維數(shù)組A[m][n],這是一個m行,n列的二維數(shù)組。設a[p][q]為A的第一個元素,即二維數(shù)組的行下標從p到m+p,列下標從q到n+q,按“行優(yōu)先順序”存儲時則元素a[i][j]的地址計算為:LOC(a[i][j]) = LOC(a[p][q]) + ((i ? p) * n + (j ? q)) * t,按“列優(yōu)先順序”存儲時,地址計算為:LOC(a[i][j]) = LOC(a[p][q]) + ((j ? q) * m + (i ? p)) * t,存放該數(shù)組至少需要的單元數(shù)為(m-p+1) * (n-q+1) * t 個字節(jié)。
形參和實參只要維數(shù)對應就可以了
例如
函數(shù)中 proc(int a[][10]) 可以省略第一維的大小,因為c語言編譯系統(tǒng)不檢查第一維的大小,只要第二維大小相同,形參數(shù)組第一維可以與實參不同。
主函數(shù)中 先定義了b[][10]
引用時:proc(b)即可
即把2維數(shù)組b得首地址即b[0][0]的地址傳給形參a,因為數(shù)組名本身既是指針常量,所以在函數(shù)中對數(shù)組a中元素的操作會改變數(shù)組b中元素得值。
數(shù)組的4種聲明方式:
1.先聲明再初始化
例如:
//1.聲明
int[] nums;
//初始化
nums = new int[5];
2.聲明并初始化
例如:
//2.聲明、初始化
int[] nums = new int[10];
3.創(chuàng)建數(shù)組同時賦值
例如:
//3.創(chuàng)建數(shù)組同時賦值
String[] names=new String[]{"大名","小米","夏雨荷"};
int[] ages=new int[]{21,22,21,56,13};
for (int i = 0;i names.length;i++){
System.out.prinrln(names[i]);
}
for (int i = 0;i ages.length;i++){
System.out.prinrln(ages[i]);
}
4.創(chuàng)建同時賦值,簡寫,不能寫成兩條語句
例如:
//4.創(chuàng)建同時賦值,簡寫,不能寫成兩條語句
String[] cities = {"上海","北京"};
擴展資料:
數(shù)組(Array)是有序的元素序列。若將有限個類型相同的變量的集合命名,那么這個名稱為數(shù)組名。組成數(shù)組的各個變量稱為數(shù)組的分量,也稱為數(shù)組的元素,有時也稱為下標變量。用于區(qū)分數(shù)組的各個元素的數(shù)字編號稱為下標。數(shù)組是在程序設計中,為了處理方便, 把具有相同類型的若干元素按有序的形式組織起來的一種形式。 這些有序排列的同類數(shù)據(jù)元素的集合稱為數(shù)組。
數(shù)組是用于儲存多個相同類型數(shù)據(jù)的集合。
在C語言中, 數(shù)組屬于構造數(shù)據(jù)類型。一個數(shù)組可以分解為多個數(shù)組元素,這些數(shù)組元素可以是基本數(shù)據(jù)類型或是構造類型。因此按數(shù)組元素的類型不同,數(shù)組又可分為數(shù)值數(shù)組、字符數(shù)組、指針數(shù)組、結構數(shù)組等各種類別。
這樣傳:
函數(shù)聲明:Func(變量類型 *[二維數(shù)組的列長] arry);
char arry[][4] ;
Func(arry);
C語言編程的過程中,不可避免的會碰到二維或二維以上的數(shù)組作為函數(shù)的形參的情況,在以前的編程過程中,習慣了動態(tài)數(shù)組的應用,很是使用直接定義高維數(shù)組。最近在編程的過程中就碰到了這個問題:有如下的測試程序:
voidtest(double??**x,int?Row,int?Col);
voidtest(double??**x)
{
for(int?i=0;iRow;i++)
for(int?k=0;kCol;k++)
x[i][k]?+=?100.0;
}
intmain(int?argc,?char?*argv[])
{
/*
double?**x;
x?=?new?double?*[3];
for(int?i=0;i3;i++)
x[i]?=?new?double[3];
*/
double?x[3][3];
for(int?i=0;i3;i++)
for(int?k=0;k3;k++)
x[i][k]?=?i*k;
test(x,3,3);
for(int?i=0;i3;i++)
for(int?k=0;k3;k++)
printf("x[%d][%d]=?%e\n",i,k,x[i][k]);
getch();
return?0;
}
編譯時提示Cannot?convert?'double?[*][3]'?to?double?**'。
將調(diào)用方式強制進行類型轉換:test((double?**)x),編譯通過,運行出錯,提示非法越界。
據(jù)傳:因為棧上分配的數(shù)組和堆上分配的數(shù)組在內(nèi)存排列上可能不相同,直接定義的數(shù)組是存儲在程序的堆棧區(qū),數(shù)據(jù)占用連續(xù)的區(qū)間;而動態(tài)申請的數(shù)組是在系統(tǒng)的遠堆上(far?heap),除最后一維的元素是連續(xù)存放的外,其他維上的元素有可能不是在一塊連續(xù)的內(nèi)存區(qū)域里。
//棧上:?
int???ia[2][2]???=?{2,3,4,5};????//4個元素是連續(xù)排列的內(nèi)存段?
//堆上:?
int???**p??=??new??int*[2];???//只有每行內(nèi)是連續(xù)排列,各行并不一定連續(xù)排列?
for?(?int??i??=?0;??i???2;?i++?)?
{?
p[i]???=??new??int[2];?
}?
for?(?int??i??=??0;??i????2;??i++?)?
{?
for?(?int??j??=??0;??j????2;??j++?)?
{?
p[i][j]???=???ia[i][j];?
}?
}?
所以對棧上的數(shù)組用int??**p指向首地址,因為int??**p一次解引用為地址指針,而非堆上的指向數(shù)組的指針,所以二次解引用會出錯。?
如果找一個通用方程只能用:?
void???f(?int??*p,?int??row,??int??col?)?????//給出數(shù)組的行和列,對堆上的數(shù)組不合適???
{?
for?(?int??i?=??0;??i????row;??i++)?
{?
for?(?int??j??=??0;??j???col;??j++?)?
{?
cout???p[i?*?row?+?j]???"???";????????????????????????
}?
cout???endl;?
}?
}?
int???main(){?
//.........?
int???ia[2][2]???=??{2,3,4,5};?
f(?(int*)ia,?2,?2?);?
}
采用上面的通用辦法還是比較麻煩,這無形中對編程增加了難度,為了避免這個麻煩可以采用動態(tài)數(shù)組的形式,將原來采用直接定義的數(shù)組全部換成動態(tài)數(shù)組,類似開頭例子中被注釋掉的那部分代碼,當然這樣也有后續(xù)的麻煩,動態(tài)數(shù)組的生命周期完成后必須釋放內(nèi)存空間,這也有點羅嗦,但是畢竟可以直接使用數(shù)組的形式,比上面的通用方式還是要簡單一點。
如果執(zhí)意要使用直接定義的數(shù)組該怎么辦呢?有如下幾種方法:
方法一:
voidtest(double??(*x)[3],?int?Row,?int?Col);
調(diào)用方式:test(x,Row,Col);
調(diào)用用方式?test(x,Row,Col);
方法二:
voidtest(double??x[][3],?int?Row,int?Col);
調(diào)用方式?test(x,Row,Col);
對于多維數(shù)組作為參數(shù),除第一維之外的其它維必須指定維數(shù),否則是肯定編譯不過去的。
從上面的對直接定義的數(shù)組的引用情況看,直接定義的數(shù)組的使用比較麻煩,一旦直接定義數(shù)組的維數(shù)發(fā)生變換,函數(shù)的定義必須相應的修改,否則程序就會出錯,這也增加了程序進一步開發(fā)的麻煩,為了一勞永逸的解決這個問題,建議還是使用動態(tài)數(shù)組的方法,雖然需要手工釋放內(nèi)存,但是除卻了后續(xù)的麻煩。
新聞標題:c語言函數(shù)引入二維數(shù)組 C語言函數(shù)調(diào)用二維數(shù)組
地址分享:http://www.sd-ha.com/article18/docjhgp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供、響應式網(wǎng)站、做網(wǎng)站、網(wǎng)站收錄、域名注冊、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)