⑴ c語言調用數組返回數組怎麼做
#include <stdio.h>
#define MIN(x,y)
int * add_1();
main()
{
int * p = add_1();
int b[5];
for(int i=0;i<5;i++)
{
b[i] = *(p+i);
}
for(i=0;i<5;i++)
{
printf("%d",b[i]);
}
}
int * add_1()
{
int static a[5]={1,2,3,4,5};
return a;
}
(1)c語言中如何返回數組擴展閱讀:
注意事項
一、該數組不能是返回函數的局部變數數組,因為局部變數數組在退出函數後會被釋放。
可以是全局變數,靜態局部變數,動態分配內存,以及從函數參數傳過來的數組地址。
二、返回指針時,無法返回長度,所以需要其它方式傳回數組長度,以下是幾種常用的方法。
1、約定固定長度。
2、以函數參數返回數組長度。
3、將長度保存在全局變數中。
4、約定數組結束標記。
5、在數組中存儲數組長度,如存在第一個元素中。
有些時候需要子函數將一個數組返回出來,通常是兩種方法,一種是靠指針,另一種是結構體。
例如指針:
#include <stdio.h>
char *test(char *tmp)
{
return tmp;
}
void main(void)
{
printf("%s",test("第一個測試例子 "));
}
⑵ C語言讀取文件如何返回一個數組
c語言沒有直接讀取返回數組的函數。
看你問題里文件內容格式是:一行一個字元串回車換行。
那麼,用fgets一次讀一行,你寫循環調用這個fgets函數把讀取的值放在數組里。
至於你說的數組長度寬度不定,在c里需用malloc動態申請內存。
方法1:用fseek和ftell獲取整個文件位元組數,然後用malloc申請一個整個文件大小的內存地址(二維數組在內存中就是一維)。然後在循環中每次讀取一行到這個地址並計算一行長度,利用指針移得到每行首地址,最後所有行指針組成二維數組(行數也是動態申請)
方法2:你定義一個比較大的字元數組,作為零時存儲變數,每次循環中讀取一行到這個數組,再用strlen計算字元串長度,再用malloc按照這個長度申請一組地址(一行),並利用strcpy轉移內容,最後組成二維數組。
方法3:直接用malloc申請很大的二維數組,循環讀取獲取內容後,strlen獲取每行實際內容的長度。最後用realloc根據實際寬度和行數修改數組大小。
⑶ C語言函數中返回數組
你的程序:
main()
{
int
b[3];
b=pop();
}
int
*
pop()
{
int
a[3],i;//定義的局部變數a[3]在調用完之後自動釋放其空間
for(i=0;i<3;i++)
a[i]=i;
return
a;//返回的是指向數組a[3]的地址而不是數組a[3]本身
}
註:既然上面說到調用的方法返回的是指向數組a[3]的地址,所以主函數中b接收的應該是指向數組a[3]的地址,而數組a[3]在方法調用完後又被釋放了,所以b接收不到數組a[3],故出錯。
正確的程序:
#include<stdio.h>
main()
{
int
b[3];
pop(b,3);
}
void
pop(int
a[],int
n)//該方法傳入兩個參數,第一個是傳入指向數組的地址,第二個參數是傳入數組的長度,不需寫返回語句return,只需通過指向數組的地址的傳入就可以直接將數組b[]的值改變
{
int
i;
for(i=0;i<n;i++)
a[i]=i;
}
⑷ c語言怎麼返回字元串數組
C語言返回值不支持返回數組,不過可以通過返回指針類型,用以替代數組。在C語言中,數組大多數時候是可以用指針替代的。
不過需要注意的是,不能夠返回在函數內部定義的局部變數數組,因為一旦函數退出,局部變數就會被釋放,導致數組指針無效。
可以返回以下幾種:
1 全局變數,或者全局變數空間內的一個地址。
2 靜態局部變數,或者靜態局部變數內部的一個地址。
3 從參數傳入的數組/指針變數,或者在其上做的合法偏移。
4 在數組內部動態申請的空間首地址。
⑸ 在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語言函數返回數組
在C語言中,無法直接返回一個數組,但是可以通過返回對應類型指針的方式,返回數組。
在大多數情況下,一維數組和一維指針是可以通用的。
比如,定義一個函數,申請一定長度的整型動態數組,其長度用參數傳入,並將結果返回。如出錯,返回空指針NULL。 代碼可以寫成如下形式:
int*int_array_create(intn)//參數n為數組元素個數
{
int*r;
if(n<=0)returnNULL;//參數錯誤
r=(int*)malloc(sizeof(int)*n);//申請內存空間,大小為n個int長度。
returnr;//返回得到的整型數組的指針。
}
⑺ C語言 怎麼返回一個數組
你想返回一個數組,因為你在一個函數內創建了數組,屬於局部變數,所以他在stack部分,而stack部分是用後類似於銷毀的,你返回的地址類似於一塊垃圾的地址,所以編譯警告。你要想返回函數內創建的數組地址的話需要
//insideafunction
{
//nisthesizeofthearray;
int*array=(int*)malloc(sizeof(int)*n);
/*
dosomethingwitharray
*/
returnarray;
}
這樣這個數組建立在heap堆上,調用完函數還在,而你返回了那個堆上數組的首地址,這樣就沒問題了。
用完free(array);
樓上用static不推薦,用static的話會在整個程序的run time運行時都佔用空間。而是用malloc,動態申請釋放更合理。
⑻ c語言中函數能返回一個數組嗎
在C語言中,無法直接返回一個數組,但是可以通過返回對應類型指針的方式,返回數組。
在大多數情況下,一維數組和一維指針是可以通用的。
比如,定義一個函數,申請一定長度的整型動態數組,其長度用參數傳入,並將結果返回。如出錯,返回空指針NULL。
代碼可以寫成如下形式:
int
*int_array_create(int
n)//參數n為數組元素個數
{
int
*r;
if(n<=0)
return
NULL;//參數錯誤
r
=
(int
*)malloc(sizeof(int)*n);//申請內存空間,大小為n個int長度。
return
r;//返回得到的整型數組的指針。
}
⑼ c語言中如何使返回值為數組
函數返回值一般為一個值,現在你要返回數組,那麼你可以在程序中定義全局數組,或者你通過傳指針的方式傳過來數組參數,在函數中更改了數組的值後又把數組首地址返回去就可以用了。
⑽ c語言如何返回一個數組
只能返回一個數,數組不能返回,以數組為函數參數傳給形參時,由於是數組名傳遞(地址傳遞),實參和形參共用一段內存,對形參更改時實參的值也會改變,所以不需要返回值