當前位置:首頁 » 編程語言 » c語言函數返回數組指針的函數

c語言函數返回數組指針的函數

發布時間: 2023-05-28 20:21:52

A. 用c語言如何使函數返回值為指向一維數組的指針

這個問題一個較為妥善的方法是把數組定義在主函數,再傳入數組地址給自定義函數,如果你非要在自定義函數里定義也行,至於是否需要設置為static,那得看情況,因為函數退出時棧空間並不是馬上被刷新,如果你能保證該棧空間在你訪問前沒被釋放就沒必要定義為static,但是保險起見定義static更好,因為你可能不知道到底該內存是不是被重新寫入了數據,至於你說要返回指向指針的指針,我舉個例子,int**
fun(),這個就是返回一個指向指針的指針,其指向的指針指向int型,呵呵,明白了沒

B. c語言 函數返回數組指針

由於你在子函數int *shuzu(void)中定義的數組 a[4];屬於局部變數,在子函數結束時會被釋放,所以返回的指針變成野指針,會亂碼;簡單的解決方法有兩種,1. 將數組定義在主函數之前(#include <stdio.h>下面),那麼就變成了全局變數,不會被釋放了;2.使用malloc或者calloc開空間後再賦給這個數組,這樣也不會被釋放了;第一種方法有缺點,以後學到全局變數的時候會知道,第二種方法估計你還沒學到,不過很簡單,網路一下就會了~~~

C. c語言函數返回數組

函數是無法返回數組的,只能返回指針,但返回指針的弊端是指針指向的內存不能是函數的局部變數的。所以還得用傳出參數,有兩個辦法,一是直接用一個array就搞定,另它的每一行的最後一列是計算出來的平均值;另一個方法就是再傳入進去一個指針,返回平均數。第一種可以不修改當前介面直接改,但如果無所謂還是第二種比較好,代碼如下:

voidstudent_aver(floatarray[3][3],floataverage[3]){
inti,j;
floatsum;
for(i=0;i<3;i++){
sum=0;
for(j=0;j<3;j++)
sum=sum+array[i][j];
average[i]=sum/3;
}
}

D. C語言怎麼讓一個函數返回指針

這種方式叫做「用指針函數*creat()的返回值來傳遞動態內存」,這是一個C語法

首先你喚粗帆要注意,子函數*creat()用了malloc動態申請內存,凳高而return返回的是指針變數所指向的地址,而不是指針!相當於將你所申請的動態內存返回給主函數

int *fun(void)//這里是指針函數
{
int *p = (int *) malloc (int);/和雹/動態申請內存//p在這里指向了一塊合法內存的地址
return p;
}

void main(void)
{
int *q = NULL;
q = fun();//fun()返回指針p所指向的地址,(指針p是在棧上創建的,所以*fun()函數運行完,指針所分配的內存被系統自動釋放)這時q指向p,得到了malloc所申請到的內存
free(q);//釋放動態內存
}

E. (C語言)返回指向數組的指針的函數

第二種方法是因為類型不匹配(double*與(double(*)[ROW])產生錯誤,而且
((double (*)[row])matrix);
里的[row]是一個變數,而指向數組的指針
double (*matrix)[ROW]里的ROW只能使用常量,所以這里也有一個錯誤。
由於指向數組的指針指向的數組長度(即第一維)必須是確定的常量,所以你這種行列皆不確定的數組不能用這種形式返回。

我覺得用第一種形式好一點,訪問二維數組a[i][j]可以轉換成訪問一維數組a[i*row+j];//row是列數

如果非要返回二維數組的話,我想用指針數組會好一點,不過分配空間的時候就麻煩一點。

F. 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;
}

G. 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了,如果哪裡出了差錯,請指正。】

H. C語言用返回指針值的函數輸出數組

因為input()函數創建的數組num[5]作用域在input()函數之內,當input()函數調用結束後,這段內存會被回收,也就是裡面的值會變成其他數。修改辦法是在堆區創建數組變數手動釋放內存!

修改後:


I. c語言中怎樣返回一個數組

在C語言中,無法直接返回一個數組,但是可以通過返回對應類型指針的方式,返回數組。

在大多數情況下,一維數組和一維指針是可以通用的。


比如,定義一個函數,申請一定長度的整型動態數組,其長度用參數傳入,並將結果返回。如出錯,返回空指針NULL。 代碼可以寫成如下形式:

int*int_array_create(intn)//參數n為數組元素個數
{
int*r;
if(n<=0)returnNULL;//參數錯誤
r=(int*)malloc(sizeof(int)*n);//申請內存空間,大小為n個int長度。
returnr;//返回得到的整型數組的指針。
}
熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:336
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:378
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:612
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:944
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:741
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:803
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:511
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:372