c語言返回數組的函數
㈠ c語言中怎樣返回一個數組
在C語言中,無法直接返回一個數組,但是可以通過返回對應類型指針的方式,返回數組。
在大多數情況下,一維數組和一維指針是可以通用的。
比如,定義一個函數,申請一定長度的整型動態數組,其長度用參數傳入,並將結果返回。如出錯,返回空指針NULL。 代碼可以寫成如下形式:
int*int_array_create(intn)//參數n為數組元素個數
{
int*r;
if(n<=0)returnNULL;//參數錯誤
r=(int*)malloc(sizeof(int)*n);//申請內存空間,大小為n個int長度。
returnr;//返回得到的整型數組的指針。
}
㈡ C語言,函數中如何返回二維數組,用return和不用return兩種方法
return 就直接返回可以了
不用return 就將二維數組的指針或者引用作為參數
㈢ 怎麼使C語言的函數返回值為一個數組
// 方法1,用靜態變數進行返回
char *SubFunction(void)
{
static char szText[5] = "adfa"; // 用靜態空間
//對p進行賦值操作
return szText;
}
void Caller() // 這個函數調用SubFunction
{
TRACE("%s\n", SubFunction);
}
// 方法2,用指針傳遞
void SubFunction(char *pText1, char *pText2)
{
// 對pText1, pText2運算
strcpy(pText1, "love");
strcpy(pText2, "you");
return;
}
void Caller() // 這個函數調用SubFunction
{
char szText1[5], szText2[5]; // 當然這里也可以動態分配內存
SubFunction(szText1, szText2); // szText1, szText2就是帶回的值
TRACE("%s %s\n", szText1, szText2);
}
㈣ 在C語言中如何使函數返回數組
C/C++不能直接返回一個數組。這是由於在C/C++中,數組不是一種類型,因此不能被直接返回。 在C/C++中,一般有兩種方法來返回一個數組。 第一種方法: 返回一個指向數組的指針,例如char (*retArray)[10]聲明了一個函數retArray,該函數可以返回指向具有10個char元素的數組例子如下:#include#includeint (*retArray())[10]{int (*a)[10];int i=0;/*動態開辟空間*/ a=calloc(10,sizeof(int));/*賦值*/for(i=0;i<10;i++){(*a)[i]=i;}return a;}int main(){int (*b)[10]; /*函數返回指向數組的指針*/ b=retArray(); /*列印第一個元素*/ printf("%d/n",(*b)[0]); /*釋放空間*/free(b);return 0;}第二種方法: 如果你不喜歡用指針的形式返回數組,那麼可以採用返回一個結構的形式。這種形式相對較安全,可以避免忘記釋放指針而造成內存泄露,也可以避免訪問懸掛指針造成的錯誤。但缺點是由於結構是先拷貝再返回,因此如果結構較大時,會影響效率和佔用較大內存。 例子如下:#includestruct tag{int a[10];}x,y;struct tag retArray(){int i=0;for(i=0;i<10;i++) x.a[i]=i;return x;}int main(){struct tag y=retArray(); printf("%d/n",y.a[3]);return 0;}注意:(1)在返回指針時要切記要避免內存泄露和訪問懸掛指針。 (2)很多人認為指針和數組等價的,這是錯誤的。int (*a)[10]和int b[10]兩者是不能直接用a=b來賦值的。在數組和指針作為函數參數傳遞時,二者可以認為等價,這是因為數組會被轉化為指針來傳遞。 (3)返回多維數組方法類似。
㈤ C語言函數如何return數組
數組在作為函數返回值或者函數參數時,實際上只作為指針來返回或者傳遞的。因此返回值用指針數據類型。比如下面的代碼:
intg_a[4]={1,2,3,4};
int*retn_arrary()//返回值用指針類型即要。
{
returng_a;
}
㈥ C語言讀取文件如何返回一個數組
c語言沒有直接讀取返回數組的函數。
看你問題里文件內容格式是:一行一個字元串回車換行。
那麼,用fgets一次讀一行,你寫循環調用這個fgets函數把讀取的值放在數組里。
至於你說的數組長度寬度不定,在c里需用malloc動態申請內存。
方法1:用fseek和ftell獲取整個文件位元組數,然後用malloc申請一個整個文件大小的內存地址(二維數組在內存中就是一維)。然後在循環中每次讀取一行到這個地址並計算一行長度,利用指針移得到每行首地址,最後所有行指針組成二維數組(行數也是動態申請)
方法2:你定義一個比較大的字元數組,作為零時存儲變數,每次循環中讀取一行到這個數組,再用strlen計算字元串長度,再用malloc按照這個長度申請一組地址(一行),並利用strcpy轉移內容,最後組成二維數組。
方法3:直接用malloc申請很大的二維數組,循環讀取獲取內容後,strlen獲取每行實際內容的長度。最後用realloc根據實際寬度和行數修改數組大小。
㈦ C語言函數中返回數組
void pop(int b[],int n)
{
int i;
for(i=0;i<n;i++)
b[i]=i;
}
main()
{
int b[3],i;
pop(b,3);
for(i=0;i<3;i++) printf("%d",b[i]);
}
離開子函數之後,那個數組空間已經釋放,返回好像沒意義了