c語言函數返回數組指針的函數指針
❶ (c語言)返回指向數組的指針的函數
第二種方法是因為類型不匹配(double*與(double(*)[ROW])產生錯誤,而且
((double (*)[row])matrix);
里的[row]是一個變數,而指向數組的指針
double (*matrix)[ROW]里的ROW只能使用常量,所以這里也有一個錯誤。
由於指向數組的指針指向的數組長度(即第一維)必須是確定的常量,所以你這種行列皆不確定的數組不能用這種形式返回。
我覺得用第一種形式好一點,訪問二維數組a[i][j]可以轉換成訪問一維數組a[i*row+j];//row是列數
如果非要返回二維數組的話,我想用指針數組會好一點,不過分配空間的時候就麻煩一點。
❷ 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語言 通過指針從函數返回一個數組,編一道簡單的程序解釋
通過指針從函數返回一個數組
換句話說,返回的並不是數組,而是數組的首地址!
#include<stdio.h>
int*fun()//返回類型int*,與returna中的a的類型相同才可以!
{
staticinta[]={1,2,3};//靜態變數,函數結束後,不會被系統回收
returna;//返回數組名,即數組首地址
}
intmain()
{
int*p=fun();//定義整型指針p接收返回地址
inti;
for(i=0;i<3;i++)//遍歷返回的地址中的數據!
printf("%d",p[i]);
printf(" ");
return0;
}
❹ C語言怎麼讓「函數」返回「指針數組」
你好
從問題來看,似乎你對於指針的概念沒太理解。指針變數中存儲的是內存中的地址,而實際的數據放在這個地址中。
按照這段代碼來說,int* 聲明的指針指向內存中的一塊地址,而在這塊地址中存儲著一個整形數值。所以要返回這樣的值,也就相當於是返回一個內存地址。因此,在程序中有兩種具體的解決辦法:
1.在調用函數的時候,直接將變數的指針(即內存地址)作為參數傳入,在函數執行的時候,就會自動對內存中相應地址的數據進行操作。使用這種方法也就不需要返回值了。具體到這段代碼中,就是在Main中聲明int* tempA[10],把foo函數聲明為void foo(int* a[10]),調用時用foo(tempA),在foo函數中直接使用a[10]即可。
2.直接把內存地址作為返回值,因為在C中,數組名就是數組首元素的指針,因此直接返回數組名就可以了,即return a即可。如果是普通變數,要用取內存地址的運算符&,比如聲明了整型變數 int i,就可以return &i。這與printf函數中的使用方法是相通的。
【按照補充的內容:】
a-------->a1-------->i1
|-------->a2-------->i2
|……………………
|-------->an-------->im
這樣的調用方法,只能保證a1-an不被修改,怎麼保證i1-im不被修改?
希望以上回答能幫到你。【PS.很久沒用C了,如果哪裡出了差錯,請指正。】
❺ C語言中,怎樣定義函數可以讓函數返回一個指針數組
返回它的地址不就行了么,指針數組的首地址就可以了
比如
有一個指針數組
char
*p[10]
=
{這裡面放的都是指針},那麼p的類型就是char
**類型
你定義一個函數,返回char
**類型就行了
比如
char
**fun()
{
char
**s;
return
s;
}
❻ c語言中 如果想讓一個函數返回數組指針,函數返回類型應該怎麼定義
int(*fun())[10];
fun是一個返回數組指針int(*)[10]的函數
❼ C語言怎麼讓「函數」返回「指針數組」
首先,你不應該返回局部變數的指針,因為局部變數在離開函數後就會被銷毀。如果你想這樣返回一個數組的話,你應該malloc出一個數組來返回。
至於應該return什麼,return
(malloc出來的那個指針)就可以了。
例如
int**
foo()
{
int
**p
=
(int
**)malloc(sizeof(int
*)*10);
...
...
...
return
p;
}
這個p指向一個內存段,這個內存段存有十個int*類型的元素。
❽ c語言,函數返回數組指針出錯為什麼啊
C語言里不可以返回數組,只能返回指針
函數內的數組是局部變數,離開函數後就會離開了其作用域,原則上講就會被銷毀(實際是編譯器及編譯器選項而定),自然不能被回傳
❾ 用C語言如何使函數返回值為指向一維數組的指針
這個問題一個較為妥善的方法是把數組定義在主函數,再傳入數組地址給自定義函數,如果你非要在自定義函數里定義也行,至於是否需要設置為static,那得看情況,因為函數退出時棧空間並不是馬上被刷新,如果你能保證該棧空間在你訪問前沒被釋放就沒必要定義為static,但是保險起見定義static更好,因為你可能不知道到底該內存是不是被重新寫入了數據,至於你說要返回指向指針的指針,我舉個例子,int**
fun(),這個就是返回一個指向指針的指針,其指向的指針指向int型,呵呵,明白了沒
❿ c語言 函數返回數組指針
由於你在子函數int *shuzu(void)中定義的數組 a[4];屬於局部變數,在子函數結束時會被釋放,所以返回的指針變成野指針,會亂碼;簡單的解決方法有兩種,1. 將數組定義在主函數之前(#include <stdio.h>下面),那麼就變成了全局變數,不會被釋放了;2.使用malloc或者calloc開空間後再賦給這個數組,這樣也不會被釋放了;第一種方法有缺點,以後學到全局變數的時候會知道,第二種方法估計你還沒學到,不過很簡單,網路一下就會了~~~