方法

成都創(chuàng)新互聯(lián)公司專注于鐵西網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供鐵西營(yíng)銷型網(wǎng)站建設(shè),鐵西網(wǎng)站制作、鐵西網(wǎng)頁(yè)設(shè)計(jì)、鐵西網(wǎng)站官網(wǎng)定制、微信平臺(tái)小程序開發(fā)服務(wù),打造鐵西網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供鐵西網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
有2
將該數(shù)組定義為全局變量,即:
int
g_arr;
void
fun()
{...}
void
main()
{...}
2.將該數(shù)組作為函數(shù)參數(shù)傳遞到自定義函數(shù)里,即:
void
fun(int
arr[])
{...}
void
main()
{
int
arr[10];
fun(arr);
}
首先int max(int a[])這個(gè)函數(shù)參數(shù)的意思是接受一個(gè)數(shù)組的首地址,也就是說(shuō)調(diào)用的時(shí)候必須是地址,也可以說(shuō)是指針;
如果調(diào)用寫成max(a[10]),這里面a[10]為第十一個(gè)元素的值當(dāng)然不行了,除非你就是把地址放在里面了,強(qiáng)制有的編譯器應(yīng)該可以通過(guò)但是會(huì)有警告。
其實(shí)理解了的話max(a)和max(a[0])都是可以的,都表示把數(shù)組a的首地址傳過(guò)去。
可以多去了解一下指針,多上機(jī)操作,多練練就會(huì)理解的越深。
一、數(shù)組可定義為全局變量,函數(shù)直接調(diào)用。
二、數(shù)組可定義為局部變量,再通過(guò)參數(shù)傳遞到函數(shù)中調(diào)用(實(shí)參傳數(shù)組名,表示數(shù)組首地址,也可通過(guò)指針或數(shù)組名+數(shù)字來(lái)傳遞數(shù)組局部地址)。
三、main函數(shù)想要調(diào)用函數(shù)返回的數(shù)組,可用static定義靜態(tài)變量或malloc定義動(dòng)態(tài)數(shù)組(字符串常量也可返回使用,但局部變量,在函數(shù)調(diào)用結(jié)束會(huì)被釋放,不能作為返回地址使用)。
下面是演示代碼:
#include stdio.h
#include string.h
#include malloc.h
char str1[]="我是全局變量數(shù)組";
char *fun0(char str2[]);
char *fun1();
char *fun2();
int main()
{
char *str3=NULL,*str4=NULL,*str5=NULL;
char str2[]="我是main函數(shù)的局部數(shù)組變量";
str3=fun0(str2);
printf("str3:%s,fun函數(shù)調(diào)用結(jié)束,我的地址依然可以使用\n",str3);
str4=fun1();
printf("str4:%s,fun函數(shù)調(diào)用結(jié)束,我的地址依然可以使用\n",str4);
str5=fun2();
printf("str5:%s,fun函數(shù)調(diào)用結(jié)束,函數(shù)結(jié)束不會(huì)自動(dòng)釋放\n",str5);
free(str5);
return 0;
}
char *fun0(char s[])
{
static char str3[]="我是fun函數(shù)申明的靜態(tài)數(shù)組變量";
printf("str1:%s,fun函數(shù)可以直接調(diào)用\n",str1);
printf("str2:%s,fun函數(shù)通過(guò)參數(shù)將我的地址傳進(jìn)來(lái)\n",s);
return str3;
}
char *fun1()
{
char *str4="我是fun1函數(shù)的字符串常量";
return str4;
}
char *fun2()
{
int len;
char sTemp[]="這是一個(gè)臨時(shí)數(shù)組,之后用于給mallc申請(qǐng)的地址傳值,傳遞內(nèi)容為:(我是fun函數(shù)通過(guò)mallic申請(qǐng)的數(shù)組)";
char *str5=NULL;
len=strlen(sTemp+63);
str5=(char *)malloc(sizeof(char)*len+1);
if(!str5)return NULL;
strcpy(str5,sTemp+63);
str5[len-2]=0;
return str5;
}
void min(int a[],int x) //int x是用來(lái)標(biāo)記傳過(guò)來(lái)的數(shù)組的長(zhǎng)度(即a數(shù)組指向的那個(gè)數(shù)組的長(zhǎng)度)。
因?yàn)槟阍诤瘮?shù)中計(jì)算的時(shí)候,a只能當(dāng)做一個(gè)指針來(lái)用,沒有具體的長(zhǎng)度,而且你是int 型的,所以沒有標(biāo)準(zhǔn)庫(kù)函數(shù)來(lái)求你需要計(jì)算的數(shù)組的長(zhǎng)度,所以你就沒法計(jì)算。
void min(int a[],int b[])這樣計(jì)算沒錯(cuò)誤,但是在計(jì)算的時(shí)候,你要知道a所指向的數(shù)組的長(zhǎng)度和b所指向的長(zhǎng)度,例如下面的例子:
a數(shù)組中有10個(gè)數(shù),b數(shù)組中有2個(gè)數(shù),a數(shù)組的大小是40個(gè)字節(jié),而指向他的c數(shù)組大小只有4個(gè)字節(jié),所以當(dāng)你運(yùn)算的時(shí)候,你要知道c指向的a數(shù)組的大小,同理,d也是一樣。
#include"stdio.h"
#include"string.h"
void min(int c[],int d[])
{
int i,j=0;
int e[100]={0};
printf("c=%d\n",sizeof(c));
for(i=0;i10;i++)?//a數(shù)組中有10個(gè)數(shù)
e[j++]=c[i];
for(i=0;i2;i++)?//b數(shù)組中有2個(gè)數(shù)
e[j++]=d[i];
for(i=0;e[i];i++)
printf("%d\t",e[i]);
}
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int b[2]={3,4};
printf("a=%d\n",sizeof(a));
min(a,b);
}
沒有這樣的函數(shù)。不過(guò)如果是靜態(tài)定義的數(shù)組,可以在定義的函數(shù)中 用
sizeof(a)/sizeof(a[0]) 來(lái)表示其個(gè)數(shù) 這個(gè)是一維的。 如果是二維的 就是
sizeof(a)/sizeof(a[0][0])
如果是動(dòng)態(tài)分配的,或者是以指針?lè)绞絺鹘o了其它函數(shù),就沒辦法通過(guò)語(yǔ)句知道大小了,只能你自己記錄。
文章標(biāo)題:C語(yǔ)言帶數(shù)組表示法的函數(shù) c語(yǔ)言帶數(shù)組表示法的函數(shù)有哪些
URL標(biāo)題:http://chinadenli.net/article30/dodphso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、微信小程序、App開發(fā)、網(wǎng)站維護(hù)、微信公眾號(hào)、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)