在C/C++中如何使函式返回陣列
Java語言的函式可以輕易的返回一個數組,而C/C++卻不能直接返回一個數組。這是由於在C/C++中,陣列不是一種型別,因此不能被直接返回。
在C/C++中,一般有兩種方法來返回一個數組。
第一種方法:
返回一個指向陣列的指標,例如char (*retArray)[10]聲明瞭一個函式retArray,該函式可以返回指向具有10個char元素的陣列
例子如下:
#include <STDIO.H></STDIO.H>
#include <STDLIB.H></STDLIB.H>
int (*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;
}
第二種方法:
如果你不喜歡用指標的形式返回陣列,那麼可以採用返回一個結構的形式。這種形式相對較安全,可以避免忘記釋放指標而造成記憶體洩露,
也可以避免訪問懸掛指標造成的錯誤。但缺點是由於結構是先拷貝再返回,因此如果結構較大時,會影響效率和佔用較大記憶體。
例子如下:
#include <STDIO.H></STDIO.H>
#include <STDLIB.H></STDLIB.H>
typedef struct
{
int a[10];
}RETA;
RETA retArray()
{
RETA x;
int i=0;
for(i=0;i<10;i++)
x.a[i]=i;
return x;
}
int main()
{
int b[10];
b=retArray().a;
printf("%d/n",b[5]);
/**或者這樣呼叫
RETA y=retArray();
printf("%d/n",y.a[3]);
**/
return 0;
}
注意:
(1)在返回指標時要切記要避免記憶體洩露和訪問懸掛指標
(2)很多人認為指標和陣列等價的,這是錯誤的。int (*a)[10]和int b[10]兩者是不能直接用a=b來賦值的。在陣列和指標作為函式引數傳遞時,二者可以認為等價,這是因為陣列會被轉化為指標來傳遞。
(3)返回多維陣列方法類似。
相關推薦
在C中如何使函式返回陣列
Java語言的函式可以輕易的返回一個數組,而C/C++卻不能直接返回一個數組。這是由於在C/C++中,陣列不是一種型別,因此不能被直接返回。 在C/C++中,一般有兩種方法來返回一個數組。 第一種方法: 返回一個指向陣列的指標,例如char (*retArray
在C/C++中如何使函式返回陣列
Java語言的函式可以輕易的返回一個數組,而C/C++卻不能直接返回一個數組。這是由於在C/C++中,陣列不是一種型別,因此不能被直接返回。 在C/C++中,一般有兩種方法來返回一個數組。 第一種方法: 返回一個指向陣列的指標,例如char (*retArray)[
C++中函式返回陣列指標的幾種方法總結
因為陣列不能被拷貝,所以函式不能返回陣列。不過,函式可以返回陣列的指標或引用。返回陣列指標的方法有以下幾種: 1、方法一:使用類型別名。如下 typedef int arrt[10];//arrT是一個類型別名,它表示的型別是含有10個整數的陣列
C從函式返回陣列
C 語言不允許返回一個完整的陣列作為函式的引數。但是,可以通過指定不帶索引的陣列名來返回一個指向陣列的指標。如果您想要從函式返回一個一維陣列,必須宣告一個返回指標的函式,如下: int * myFunction() { } 另外,C 不支援在函式外返回區域性變數的地址,除非定義區域性
C語言第4課——從函式返回陣列
C 語言不允許返回一個完整的陣列作為函式的引數。但是,可以通過指定不帶索引的陣列名來返回一個指向陣列的指標。 如果想要從函式返回一個一維陣列,必須宣告一個返回指標的函式,如下: int * myFunction() { . . . } 另外,C 不支援在函式外返回區域性變數的地址,除
C++ 從函式返回陣列
C++ 不允許返回一個完整的陣列作為函式的引數。但是,您可以通過指定不帶索引的陣列名來返回一個指向陣列的指標。 如果想要從函式返回一個一維陣列,就必須宣告一個返回指標的函式,如下: int * myFunction() { . . . } 另外,C++ 不支援在函式外返回區域性變數的地址
C++中讓函式返回字串
轉:http://379910987.blog.163.com/blog/static/3352379720111026101835400/ char* Alphabet(int n){ char* pStr=new char[n+1];//last one
C語言中打印返回值
返回值 struct demo bsp %d return username har strdup demo: ----return :返回值------------------ int mosquitto_username
C#VS中一個函式呼叫另一個函式的程式碼樣例
//主函式 說明:下面的函式是想求許可證的十六位編號,最後一位是許可編號的校驗碼,是以本體碼("JY" + xukbh)為基礎來計算 entities[0].XuKeZhengBianHao = "JY" + xukbh + xukebianhaojiaoyanma(xukbh);
C++類中建構函式
我們在定義一個類之後,在利用該類定義了一個物件後,往往需要對該物件中資料成員變數進行初始化。有時候我們會誤操作,忘記初始化或者重複初始化,這樣做都會造成程式的崩潰。C++給我們提供了一個很有用的方法,就是類的建構函式。 C++類的建構函式,和其它成員函式一樣,在類中定義。不過建構函式和其他成
Telerik UI for ASP.NET AJAX教程:C#中的函式程式設計
【下載Telerik UI for ASP.NET AJAX最新版本】 在面向物件程式設計(OOP)中,我們習慣於使用物件集合或簡單資料型別。我們經常使用LINQ對這些集合進行排序和過濾,作為業務邏輯行為或資料轉換的一部分。雖然這些是我們經常執行的有用任務,但很容易忘記C#中的函式可以被視為資料
C++STL中的函式物件
前言 所謂函式物件,即 Function Object ,或者稱之為仿函式(functors)。顧名思義,就是像函式的一種物件,我們可以把函式物件看作是一個函式與物件的結合,一方面,它本質上是一個物件,但主要功能是使用其成員函式(主要是operator())在不同的容器和函式中傳
c語言中輸出函式putc_putchar_puts-printf
//輸入輸出:英文是Input/Output 簡稱IO。 //putchar:將指定的數值對應的ASCII字元列印到螢幕上。 //putc:不但指定數值,而且還可以指定列印到哪裡去。 //stdout:是指定列印到螢幕上 standard out . //putc可以指定列印到一個檔案(FILE *
C ++ 指標 | 指標與函式、陣列_3
指標與函式 1、void 函式名(int *p) #include<iostream> using namespace std; void Increment(int *p) { *p = (*p) + 1; } int main() { int a;
C語言中交換兩個陣列的值
昨天我們做了交換兩個變數的值,今天我們來看看如何交換兩個陣列的值(陣列內數的個數相同)。 我們可以這樣考慮,陣列不過是數的集合,既然我們會交換兩個數的值,那麼陣列只不過是多次交換兩個數的值,而且陣列內素下標又是依次增大的,所以這裡可以使用一個for迴圈。
C語言:理解函式指標陣列和定義
函式指標陣列和定義 陣列是一個存放相同型別資料的儲存空間,那我們已經學習了指標陣列,比如: int *arr[10];//陣列的每個元素是int* 那要把函式的地址存到一個數組中,那這個陣列就叫函式指標陣列,那函式指標的陣列如何定義呢? int (
c++ STL中sort函式的三種使用方法
複習一下~ STL,C++中的標準模板庫, 使用起來方便並且效率較高; sort函式有三種用法: 一:對基本型別陣列從小到大排序 sort( 陣列名+n1,陣列名+n2); 將陣列中下標從n1到n2的元素進行從小到大排序,不包括n2,通過n1,n2 可以對整
C++11中insert的返回值
在C++11中,關聯容器都有insert()操作,其返回值是一個pair,pair的first返回指向元素的迭代器,second是一個bool,true表示原容器中沒有要插入的元素並且插入成功,false與前者相反。 map<int,int> m;
對C語言中指標與指標陣列的理解!
指標就是地址! 概念 C語言中,允許用一個變數來存放地址,這種變數稱為指標變數。一個指標變數的值就是某個記憶體單元的地址。指標變數就是用來存放指標(地址)的變數! &運算子:求某一變數在儲存單元中的記憶體地址。 *運算子:取出指標變數所指向變數的內容,後面
c語言中常用函式
memset void *memset(void *s, int ch, size_t n); 函式解釋:將s中當前位置後面的n個位元組 (typedef unsigned int size_t )