1。保證傳遞的實參不被改變,因此可以考慮定義局部數(shù)組用于返回,但是考慮到程序的健壯性,應該在定義時用const限定
創(chuàng)新互聯(lián)公司始終堅持【策劃先行,效果至上】的經營理念,通過多達十余年累計超上千家客戶的網站建設總結了一套系統(tǒng)有效的網絡營銷推廣解決方案,現(xiàn)已廣泛運用于各行各業(yè)的客戶,其中包括:火鍋店設計等企業(yè),備受客戶贊賞。
2。只對形參的數(shù)組操作,可用一個簡單的return 返回,但前提是不能返回動態(tài)開辟的內存
因此可以定義為如下形式:ElemType * fun(const ElemType *array)或者其他等同形式
3。很多C語言庫函數(shù)就是這樣定義,如strcpy函數(shù)等,但是C語言中并沒有const關鍵字
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ù)組指針,至于它有多少個元素不關心,因為實參也只是傳個地址過來。元素個數(shù)由參數(shù)二控制。至于為什么要這么約定可以看下面補充說明。
2.void fun(int *arr, int n);
使用指針,這種方式和題目中的方式是最常用的方式,第一種最不常用。
補充說明(為什么數(shù)組作為函數(shù)參數(shù)是傳地址,而不是傳每個元素):
設想一下,有一個函數(shù)如下
int fun(int nums[1000], int size)
它的參數(shù)一要處理1000多個元素的數(shù)組,如果是傳值即每個元素,那在函數(shù)體內是不是就得再申請1000多個整數(shù)的內存,還需要把值從實參那里復制過來,這是非常耗時間的而且沒有必要,因為在內存的某個塊已經存放了這些數(shù)據(jù)。只要告訴放在哪個位置,你函數(shù)體去那里找就行了。這里說的就是傳地址了,只需要傳個數(shù)組首地址,然后告訴有多少個元素要處理就OK了。傳地址只需要復制地址給形參,相對傳每個元素快得多。
#include stdio.h
void sort(int a[20])
{ int i,j,k,t;
for(i=0;i19;i++)
{ k=i;
for(j=i+1;j20;j++)
if(a[k]a[j]) k=j;
t=a[k];a[k]=a[i];a[i]=t;
}
}
void main()
{ int a[20]={2,5,7,8,4,10,48,96,65,74,35,84,15,38,52,56,60,20,17,80};
sort(a);
}
沒問題
我調試過了
記得給我加分