方法
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計制作、網(wǎng)站設(shè)計、天橋網(wǎng)絡(luò)推廣、小程序設(shè)計、天橋網(wǎng)絡(luò)營銷、天橋企業(yè)策劃、天橋品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供天橋建站搭建服務(wù),24小時服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com
有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);
}
1.數(shù)組為參數(shù)傳遞的是數(shù)組首地址,而不是元素的值,而你說的a[size]僅僅是值,況且事實上也沒有a[size]這個元素
2.既然是數(shù)組名的傳遞,當然需要由一個數(shù)組的參數(shù)來接收,int v[]”的問題是因為他是形式參數(shù),是為了接收數(shù)組的
n的問題是因為,如果只傳遞了數(shù)組,但是函數(shù)并找不到數(shù)組的個數(shù),所以需要把數(shù)組大小傳遞過來
void fun(int arr[], int n);
在函數(shù)定義的時候,形參int arr[]不是表示某個元素的值,而是告訴編譯器第一個參數(shù)是一個數(shù)組指針,可以接收實參傳過來的數(shù)組地址。
實際上以上定義等價于下面的定義。
1.數(shù)組里面帶元素個數(shù):
void fun(int arr[常數(shù)], int n);
這里的常數(shù)可以是任意正整數(shù),實際上編譯器是會忽略,因為這里只要告訴編譯器我接收的是一個數(shù)組指針,至于它有多少個元素不關(guān)心,因為實參也只是傳個地址過來。元素個數(shù)由參數(shù)二控制。至于為什么要這么約定可以看下面補充說明。
2.void fun(int *arr, int n);
使用指針,這種方式和題目中的方式是最常用的方式,第一種最不常用。
補充說明(為什么數(shù)組作為函數(shù)參數(shù)是傳地址,而不是傳每個元素):
設(shè)想一下,有一個函數(shù)如下
int fun(int nums[1000], int size)
它的參數(shù)一要處理1000多個元素的數(shù)組,如果是傳值即每個元素,那在函數(shù)體內(nèi)是不是就得再申請1000多個整數(shù)的內(nèi)存,還需要把值從實參那里復(fù)制過來,這是非常耗時間的而且沒有必要,因為在內(nèi)存的某個塊已經(jīng)存放了這些數(shù)據(jù)。只要告訴放在哪個位置,你函數(shù)體去那里找就行了。這里說的就是傳地址了,只需要傳個數(shù)組首地址,然后告訴有多少個元素要處理就OK了。傳地址只需要復(fù)制地址給形參,相對傳每個元素快得多。
1、新建一個數(shù)組作為參數(shù)項目,如圖所示:
2、添加一個array.c文件,如圖所示:
3、包含stdio.h和stdlib.h頭文件,如圖所示:
4、輸入main函數(shù)主體及返回值,如圖所示:
5、定義一個數(shù)組arr,如圖所示:
6、定義一個function函數(shù),如圖所示:
7、將數(shù)組作為參數(shù)傳遞給function函數(shù),如圖所示:
8、運行程序,輸出結(jié)果,如圖所示:
EG:
void
sortl(float
b[],int
n)/*其中函數(shù)參數(shù)有兩個:一個是數(shù)組,形參的形式是b[],它在調(diào)用是接受具體數(shù)組的首地址;另一個形參是N,它在調(diào)用時數(shù)組元素的具體個數(shù)。注意用數(shù)組作為形參時,數(shù)組名是一對空方括號,而不能寫成b[n],數(shù)組元素個數(shù)用另一個形參*/
{
int
i,j;
float
t;
for
(i=0;i
b[j])
{
t=b[i];b[i]=b[j];b[j]=t
}
}
void min(int a[],int x) //int x是用來標記傳過來的數(shù)組的長度(即a數(shù)組指向的那個數(shù)組的長度)。
因為你在函數(shù)中計算的時候,a只能當做一個指針來用,沒有具體的長度,而且你是int 型的,所以沒有標準庫函數(shù)來求你需要計算的數(shù)組的長度,所以你就沒法計算。
void min(int a[],int b[])這樣計算沒錯誤,但是在計算的時候,你要知道a所指向的數(shù)組的長度和b所指向的長度,例如下面的例子:
a數(shù)組中有10個數(shù),b數(shù)組中有2個數(shù),a數(shù)組的大小是40個字節(jié),而指向他的c數(shù)組大小只有4個字節(jié),所以當你運算的時候,你要知道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個數(shù)
e[j++]=c[i];
for(i=0;i2;i++)?//b數(shù)組中有2個數(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);
}