方法
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比鐵嶺網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式鐵嶺網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋鐵嶺地區(qū)。費用合理售后完善,十余年實體公司更值得信賴。
有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);
}
數(shù)組只能通過指針傳遞,不能通過值傳遞。
數(shù)組參數(shù)屬于指針參數(shù),指針參數(shù)即時傳址參數(shù)(或叫引用參數(shù)), 如果想在函數(shù)中修改參數(shù)的值, 這是唯一的途徑.
如果把數(shù)組當(dāng)作參數(shù), 不管愿意與否, 它就是指針, 指向第一個值的指針.
1. 數(shù)組參數(shù)就是指向第一個元素的指針: #include stdio.h
void getArr(int p[], int si);
int main(void)
{
int ns[] = {1,2,3,4,5};
getArr(ns, sizeof(ns)/sizeof(ns[0]));
getchar();
return 0;
}
void getArr(int p[], int si) {
int i;
for (i = 0; i si; i++) {
printf("%d\n", p[i]);
}
}
2. 干脆直接聲明為指針: #include stdio.h
void getArr(int *p, int si);
int main(void)
{
int ns[] = {1,2,3,4,5};
getArr(ns, sizeof(ns)/sizeof(ns[0]));
getchar();
return 0;
}
void getArr(int *p, int si) {
int i;
for (i = 0; i si; i++) {
printf("%d\n", p[i]);
}
}
3. 即使你在形參中指定維數(shù)也不起作用: #include stdio.h
void getArr(int p[2], int si);
int main(void)
{
int ns[] = {1,2,3,4,5};
getArr(ns, sizeof(ns)/sizeof(ns[0]));
getchar();
return 0;
}
void getArr(int p[2], int si) {
int i;
for (i = 0; i si; i++) {
printf("%d\n", p[i]);
}
}
4. 既然是指針, 其值就有被修改的可能: #include stdio.h
void getArr(int p[], int si);
int main(void)
{
int ns[] = {1,2,3,4,5};
size_t i;
getArr(ns, sizeof(ns)/sizeof(ns[0]));
for (i = 0; i sizeof(ns)/sizeof(ns[0]); i++) {
printf("%d\n", *(ns+i));
}
getchar();
return 0;
}
void getArr(int p[], int si) {
int i;
for (i = 0; i si; i++) {
p[i]++;
}
}
5. 如果是字符數(shù)組, 它自己能判斷數(shù)組尾界: #include stdio.h
void getArr(char p[]);
int main(void)
{
char ns[] = "ABCDEFG";
getArr(ns);
getchar();
return 0;
}
void getArr(char p[]) {
int i;
for (i = 0; p[i]; i++) {
printf("%c: %d\n", p[i], p[i]);
}
}
例:
#includestdio.h
void?fact(int?*p,?int?n)
{
for(i?=?0;?i??n;?++i)
{
printf("%d?",?p?+?i);
}
printf("\n");
p[3]?=?6;
}
int?main()
{
int?a[5]?=?{1,?2,?3,?4,?5};
fact(a,?5);
for(i?=?0;?i??5;?++i)
{
printf("%d?",?a[i]);
}
printf("\n");
return?0;
}
用指針就可以了,如
定義有int a[5];
則這樣定義函數(shù):
int fun(int *p, int size)
{
//p為數(shù)組的首地址
//size為數(shù)組的大小
//傳遞進(jìn)去后可以像操作a一樣用下標(biāo)操作p
//如p[0], p[4]...
}
傳遞參數(shù)給函數(shù)可以這樣寫:
fun(a, 5);
若是多維數(shù)組,則第一維大小不給出,只指定后面的維數(shù)大小,如:
定義有int a[5][2];
則這樣定義函數(shù):
int fun(int p[][2], int size)
{
//p為數(shù)組的首地址
//size為第一維的大小
//傳遞進(jìn)去后可以像操作a一樣用下標(biāo)操作p
//如p[0][1], p[4][1]...
}
傳遞參數(shù)給函數(shù)可以這樣寫:
fun(a, 5);
c語言中、數(shù)組在函數(shù)中的傳遞可以數(shù)組元素的傳遞!還有就是數(shù)組名的傳遞!其實、數(shù)組名的傳遞類似指針!就是把數(shù)組的元素的首地址傳到形參的!
來傳送子函數(shù)中的數(shù)組有多種方法——可以通過函數(shù)返回值返回地址傳遞數(shù)組;也可以通過函數(shù)輸入?yún)?shù)來傳遞數(shù)組;還可以通過全局變量來傳遞數(shù)組。
子函數(shù)本身可以直接在作用域中進(jìn)行調(diào)用。
1、通過函數(shù)返回值返回地址傳遞數(shù)組。
聲明函數(shù)時需要聲明函數(shù)返回值類型為對應(yīng)數(shù)組的地址,此時可以返回數(shù)組的地址,結(jié)合數(shù)組元素的地址關(guān)系可以傳遞整個數(shù)組,同時可以根據(jù)數(shù)組的特性傳遞多個參數(shù)。
2、通過輸入?yún)?shù)傳遞數(shù)組。
聲明函數(shù)時提供空輸入?yún)?shù),調(diào)用函數(shù)時提供目標(biāo)數(shù)組,即可以通過該數(shù)組調(diào)用子函數(shù)中的數(shù)組,該方法也可以用于傳遞多個參數(shù)。
3、通過全局變量來傳遞數(shù)組。
聲明全局變量用于存儲子函數(shù)中的數(shù)組,此時可以在全局變量作用域中讀取調(diào)用子函數(shù)的數(shù)組。
注意:子函數(shù)是C語言模塊化編程思想的核心,其方法是通過輸入接口和輸出接口實現(xiàn)對黑盒的調(diào)用,故對其內(nèi)部數(shù)據(jù)的輸入和調(diào)用也需要通過輸入接口、輸出接口和程序的公共區(qū)域?qū)崿F(xiàn)。