在C中如何使函式返回陣列
Java語言的函式可以輕易的返回一個數組,而C/C++卻不能直接返回一個數組。這是由於在C/C++中,陣列不是一種型別,因此不能被直接返回。
在C/C++中,一般有兩種方法來返回一個數組。
第一種方法:
返回一個指向陣列的指標,例如char (*retArray)[10]聲明瞭一個函式retArray,該函式可以返回指向具有10個char元素的陣列
例子如下:
第二種方法:
如果你不喜歡用指標的形式返回陣列,那麼可以採用返回一個結構的形式。這種形式相對較安全,可以避免忘記釋放指標而造成記憶體洩露,
也可以避免訪問懸掛指標造成的錯誤。但缺點是由於結構是先拷貝再返回,因此如果結構較大時,會影響效率和佔用較大記憶體。
例子如下:
注意:
(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++中讓函式返回字串
轉:http://379910987.blog.163.com/blog/static/3352379720111026101835400/ char* Alphabet(int n){ char* pStr=new char[n+1];//last one
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++中的函式過載中為什麼不考慮返回值型別?
1. 問題描述 函式過載是指在同一作用域內,可以有一組具有相同函式名,不同引數列表的函式,這組函式被稱為過載函式。那為什麼不可以是函式名相同,引數列表相同,函式的返回值不同呢? 2. 從一個函式過載例項說起 看下面的一個例子,來體會一下:實現一個列印
c++中寫一個返回一個二維陣列的方法
依本人的見解,定義一個二維陣列,可以直接用一個指向指標的指標來表示 int **dp; //這樣就定義了一個二維陣列 這裡不多說,直接給出實現返回二維陣列的一個函式,大家可以比葫蘆畫瓢 用這個方法實現返回一個二維陣列的函式。 int **getdp(const cha
C中隨機函式rand()使用時要注意的問題
rand();根據由time設定產生的隨機種子,返回一個隨機整型數值rand()%100;產生0-99的隨機數,假如要產生a-b之間的數,你可以這樣寫:rand()%(b-a+1)+a注意1: rand()每次的隨機數都一樣是因為rand()函式使用不正確。各種程式語言返回的隨機數(確切地說是偽隨機數)實
C/C++中strstr()函式:返回字串中首次出現子串的地址
Opencv學堂 http://mp.weixin.qq.com/s?__biz=MzA4MDExMDEyMw==&mid=100000109&idx=1&sn=7540b49e869c3e27f87c84f6f3dfe9a8&chksm
編寫一個函式 返回陣列中最大值與最小值的差值
#include "stdAfx.h" #include "ctype.h" #include "stdlib.h" int main(void) { int sum_(int a[],int x)
☆ C/C++中使用結構體陣列->排序(姓名+學號+分數)
使用單鏈表進行排序見上一篇文章,這兩篇文章相輔相承; 傳送門:點我即達(。・ω・。) ***********************************************************************************
c/c++中system函式
原文地址:http://www.cnblogs.com/tianzeng/p/9550379.html 在windows下的system函式中命令可以不區別大小寫! 函式名: system 功 能: 發出一個DOS命令 用 法: #inc
c++中虛擬函式的理解
虛擬函式的作用,事實上就是實現了多型性,就是實現以共同的方法,但因個體差異而採用不同的策略。下面有程式碼例項來描述: class A{ public: void print(){ cout<<”This is A”<<endl;} }; class B:publ
ES6中的函式和陣列補漏
物件的函式解構 我們在前後端分離時,後端經常返回來JSON格式的資料,前端的美好願望是直接把這個JSON格式資料當作引數,傳遞到函式內部進行處理。ES6就為我們提供了這樣的解構賦值。 let json={ a:'leiy', b:'ly' } function fun({a,b="yu"})
透徹分析C/C++中memset函式(轉載只為查閱方便,若有侵權立刪)
透徹分析C/C++中memset函式 在C語言中,經常需要對記憶體進行操作,裡面涉及很多函式,但是memset函式的使用有一點需要大家格外注意,這也是我在做專案時遇到過的一個問題,除錯了很久才找出來錯誤。 &nbs
C++中如何定義動態陣列
首先:為什麼需要動態定義陣列呢? 這是因為,很多情況下,在預編譯過程階段,陣列的長度是不能預先知道的,必須在程式執行時動態的給出 但是問題是,c++要求定義陣列時,必須明確給定陣列的大小,要不然編譯通不過 如: i
C++中sort函式用法
C++中sort函式用法 排序示例: 輸入兩個數n,t,其中n是待排的結構體個數,t=0代表用降序排序,t = 1表示用升序排序 例如這樣: 例示: jack 70 peter 96 Tom 70 smith 67 從高到低 成績 peter 96 jack 70
python呼叫C++中的函式(最簡明教程)
C++的函式需要用extern描述才能被Python呼叫。先建一個名為ct.cpp的c++檔案,如下: #include<iostream> #include<string> using namespace std; extern "C"{ int hehe(){