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

c語言函數返回數組指針

發布時間: 2023-07-31 22:55:26

c語言中調用函數的返回值,如果是數組,主函數要輸出這個數組怎麼實現啊

用指針,另外保存數據的變數退出函數時不得消失。

例如:

#include<stdio.h>

int * fun(int n)

{

int i;

static int a[100]; // 這里用static

for (i=0;i<n;i++) a[i]=i;

return &a[0];

}

void main()

{

int i,n=5;

int *p; // 聲明指針

p = fun(n); // 返回指針

for (i=0;i<n;i++) printf("%d ",p[i]); // 把 p 看成數組來輸出

}

得 0 1 2 3 4

(1)c語言函數返回數組指針擴展閱讀:

注意事項

1、數組宏棚的維度必須是一個常蔽段則量表達式

int main(void)

{

constexpr int i = 20;

int j = 5;//不是常量表達式

int arr1[i];//正確

int arr2[j];//錯誤

system("燃宏pause");

return 0;

}

2、默認情況下,數組的元素被默認初始化。

而且需要注意的是,和內置類型的變數一樣,如果在函數內部定義了某種內置類型的數組,那麼默認初始化會令數組有未定義的值。

⑵ C語言函數如何return數組

數組在作為函數返回值或者函數參數時,實際上只作為指針來返回或者傳遞的。因此返回值用指針數據類型。比如下面的代碼:

intg_a[4]={1,2,3,4};
int*retn_arrary()//返回值用指針類型即要。
{
returng_a;
}

⑶ C語言數組指針

int (*pstu)[4];為指向有4個元素的數組的指針

int* getPosPerson(int pos, int (*pstu)[4]);為返回值為指針的函數

注意這是指針函數,而不是函數指針,後者為指向函數的指針變數,兩者含義是不同的

(類似指針數組和數組指針,兩者含義也是不同的,一個本質是數組,一個本質是指針)

調用該函數的語句為:ppos =getPosPerson(pos,scores);

傳入的scores表示3行4列的二維數組首行數組的地址,即&scores[0]

調用後相當於int (*pstu)[4]=scores,所以在getPosPerson中pstu與scores是等價的

即pstu可看作&scores[0],那麼pstu+pos也就等價於scores+pos,等價於&scores[pos]

即返回了指向&scores[pos](也就是scores第pos+1行的地址)的指針

返回該行指針ppos後,就可以查看該行表示的學生的4科成績了

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

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

⑸ 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;

}

(5)c語言函數返回數組指針擴展閱讀:

注意事項

一、該數組不能是返回函數的局部變數數組,因為局部變數數組在退出函數後會被釋放。

可以是全局變數,靜態局部變數,動態分配內存,以及從函數參數傳過來的數組地址。

二、返回指針時,無法返回長度,所以需要其它方式傳回數組長度,以下是幾種常用的方法。

1、約定固定長度。

2、以函數參數返回數組長度。

3、將長度保存在全局變數中。

4、約定數組結束標記。

5、在數組中存儲數組長度,如存在第一個元素中。

有些時候需要子函數將一個數組返回出來,通常是兩種方法,一種是靠指針,另一種是結構體。

例如指針:

#include <stdio.h>

char *test(char *tmp)

{

return tmp;

}

void main(void)

{

printf("%s",test("第一個測試例子 "));

}

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

熱點內容
寒靈之劍腳本 發布:2025-02-07 06:57:12 瀏覽:118
解壓的窗口 發布:2025-02-07 06:44:34 瀏覽:797
android身份證 發布:2025-02-07 06:36:43 瀏覽:430
python的庫在哪 發布:2025-02-07 06:30:24 瀏覽:348
帶鎖的鉛筆如何改密碼 發布:2025-02-07 06:18:05 瀏覽:164
ubuntu搭建samba伺服器 發布:2025-02-07 05:52:54 瀏覽:54
小型企業網如何配置可以互通 發布:2025-02-07 05:33:56 瀏覽:243
09年crv哪個配置好 發布:2025-02-07 05:17:31 瀏覽:555
nvm源碼編譯 發布:2025-02-07 05:13:19 瀏覽:126
防偽碼查詢源碼 發布:2025-02-07 05:09:39 瀏覽:770