c語言返回指針數組
⑴ c語言中,return語句怎麼樣返回一個數組
首先,C/C++只能返回數組的指針而不能返回整個數組。即使返回數組的指針,但如果函數中的數組是自動性質,那將是危險的。這是比較正宗的表述。如果確實需要從函數中返回自動性質的數組的全部元素值,有沒有辦法呢?有。由於C/C++是允許返回結構體的,可以定義一個結構體模板,把數組作為成員安排在其中,函數中臨時聲明結構體變數,操作其中的數組;完畢後返回結構體變數,在主調函數中用同類型的結構體變數接收就可間接實現「返回一個數組」。舉例代碼如下:
#include"stdio.h"
structA{
intm[30];//把數組m安排在結構體A中
};
structAfun(intn){
inti,j,k;
structAs;//在函數中聲明自動型結構體變數s
for(i=0;i<n;s.m[i++]=i+1);//為結構體成員數組m賦值1~15
for(j=n-1,i=0;i<j;i++,j--)//倒序這個數組
k=s.m[i],s.m[i]=s.m[j],s.m[j]=k;
returns;//返回結構體變數s
}
intmain(intargc,char*argv[]){
Aa;//主調函數中聲明同類型結構體變數a接收函數fun的返回值
inti;
a=fun(15);//用15調用fun(不要大於30,只是舉例),將結果賦於a
for(i=0;i<15;i++)//輸出看看是不是倒序了...
printf("%d",a.m[i]);
printf(" ");
return0;
}
運行結果如下:
⑵ c語言中 如果想讓一個函數返回數組指針,函數返回類型應該怎麼定義
int(*fun())[10];
fun是一個返回數組指針int(*)[10]的函數
⑶ C語言用返回指針值的函數輸出數組
因為input()函數創建的數組num[5]作用域在input()函數之內,當input()函數調用結束後,這段內存會被回收,也就是裡面的值會變成其他數。修改辦法是在堆區創建數組變數手動釋放內存!
修改後:
⑷ 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語言中,怎樣定義函數可以讓函數返回一個指針數組
返回它的地址不就行了么,指針數組的首地址就可以了
比如
有一個指針數組
char
*p[10]
=
{這裡面放的都是指針},那麼p的類型就是char
**類型
你定義一個函數,返回char
**類型就行了
比如
char
**fun()
{
char
**s;
return
s;
}
⑹ C語言,返回數組和指針
因為char p[]="abcdefg";這個字元串是放在棧上的 函數一退出 棧就釋放了 char *p這樣不是放在棧上 是放在靜態儲存區里 函數退出後 這段內存還一直存在。
⑺ C語言中怎樣使用返回指針的函數來表示數組
不能訪問x數組,因為array是局部變數,在調用完後array的空間會被銷毀。如果你要用數組的空間,你可以傳入一個數組變數,再把它返回。或者用malloc分配一個空間
⑻ 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語言問題,調用函數中 如何做能讓結果返回值為指針數組
C/C++里指針和數組用法是通用的,返回一個二級指針,然後按照指針數組的用法使用即可。
char
**
f1();
char**
p=f1();//接收函數返回值
printf
("%s",p[2]);//輸出第三個成員的內容
⑽ c語言 函數返回數組指針
由於你在子函數int *shuzu(void)中定義的數組 a[4];屬於局部變數,在子函數結束時會被釋放,所以返回的指針變成野指針,會亂碼;簡單的解決方法有兩種,1. 將數組定義在主函數之前(#include <stdio.h>下面),那麼就變成了全局變數,不會被釋放了;2.使用malloc或者calloc開空間後再賦給這個數組,這樣也不會被釋放了;第一種方法有缺點,以後學到全局變數的時候會知道,第二種方法估計你還沒學到,不過很簡單,網路一下就會了~~~