c語言函數返回數組指針
⑴ 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了,如果哪裡出了差錯,請指正。】