能
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、成都小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶(hù)創(chuàng)新互聯(lián)還提供了武勝免費(fèi)建站歡迎大家使用!
只要在定義函數(shù)時(shí),返回類(lèi)型聲明你要返回的類(lèi)型就可以
參考代碼:
//#include "stdafx.h"http://If the vc++6.0, with this line.
#include "stdio.h"
#include "string.h"
struct ABC{
char name[20];
int n;
};
struct ABC myfun(void){
struct ABC x={"Lining",99};//聲明一個(gè)結(jié)構(gòu)體局部變量x并初始化
return x;//返回局部變量結(jié)構(gòu)體x
}
int main(void){
struct ABC y=myfun();//聲明一個(gè)同類(lèi)型結(jié)構(gòu)體變量y并將函數(shù)返回值賦給它
printf("%s %d\n",y.name,y.n);//打出來(lái)看看
return 0;
}
#include "stdio.h"
struct abc{
int a;
int b;
char *p;
};
struct abc myabc(void){
struct abc n;
n.a=2;
n.b=3;
n.p=(char *)0x00FF3304;
return n;
}
void main(void)
{
struct abc x={1,2,(char *)0x00FF3300},y;
y=myabc();
printf("%d %d %p\n%d %d %p\n",x.a,x.b,x.p,y.a,y.b,y.p);
}
擴(kuò)展資料:
在C語(yǔ)言中,結(jié)構(gòu)體(struct)指的是一種數(shù)據(jù)結(jié)構(gòu),是C語(yǔ)言中聚合數(shù)據(jù)類(lèi)型(aggregate data type)的一類(lèi)。結(jié)構(gòu)體可以被聲明為變量、指針或數(shù)組等,用以實(shí)現(xiàn)較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。結(jié)構(gòu)體同時(shí)也是一些元素的集合,這些元素稱(chēng)為結(jié)構(gòu)體的成員(member),且這些成員可以為不同的類(lèi)型,成員一般用名字訪問(wèn)。
C++提供了許多種基本的數(shù)據(jù)類(lèi)型(如int、float、double、char等)供用戶(hù)使用。由于程序需要處理的問(wèn)題往往比較復(fù)雜,而且呈多樣化,已有的數(shù)據(jù)類(lèi)型顯得不能滿(mǎn)足使用要求。C++允許用戶(hù)根據(jù)需要自己聲明一些類(lèi)型,用戶(hù)可以自己聲明的類(lèi)型還有結(jié)構(gòu)體類(lèi)型(structure)、共用體類(lèi)型(union)、枚舉類(lèi)型(enumeration)、類(lèi)類(lèi)型(class )等,這些統(tǒng)稱(chēng)為用戶(hù)自定義類(lèi)型(user-defined type,UDT)。
可以返回結(jié)構(gòu)體,但一般不推薦這么做,特別是結(jié)構(gòu)體比較大的情況下,
因?yàn)榻Y(jié)構(gòu)體都是存在棧上,太大可能導(dǎo)致棧溢出,并且運(yùn)行效率比較低。
//語(yǔ)法編碼規(guī)則的角度看
ANSI C語(yǔ)言標(biāo)準(zhǔn),明確規(guī)定 數(shù)組類(lèi)型和函數(shù)類(lèi)型不可以做為返回值。
解決這種返回值的方法是通過(guò)指針來(lái)間接返回,即使用數(shù)組指針和函數(shù)指針。這可以做為c語(yǔ)言引入指針的另一個(gè)理由。
結(jié)構(gòu)體類(lèi)型可以做為返回值,我猜測(cè)C語(yǔ)言設(shè)計(jì)者當(dāng)時(shí)引入struct結(jié)構(gòu)體的概念,目的是為了增加一種建立C語(yǔ)言新類(lèi)型的機(jī)制, 換句話(huà)說(shuō)它希望通過(guò)struct建立的類(lèi)型,像內(nèi)置的int float類(lèi)型一樣使用方便。
//從匯編角度來(lái)看
有兩種返回值方法,第一種是直接返回到寄存器的,第二種是類(lèi)似于結(jié)構(gòu)體返回值的那樣 建立臨時(shí)存儲(chǔ)區(qū)的返回方式
比如 int 返回值類(lèi)型、指針?lè)祷刂殿?lèi)型,在ia32平臺(tái)上都是直接返回到eax寄存器 不管是vc還是gcc, 對(duì)于像float 類(lèi)型的浮點(diǎn)返回值類(lèi)型,在ia32平臺(tái),往往借助于fpu浮點(diǎn)運(yùn)算器部件中的寄存器存儲(chǔ)于棧中,第三類(lèi)就是像struct結(jié)構(gòu)體返回值,它需要建立臨時(shí)對(duì)象,對(duì)于c語(yǔ)言來(lái)說(shuō)引入一個(gè)臨時(shí)內(nèi)在區(qū)域是問(wèn)題不大的,但是對(duì)于c++這個(gè)有時(shí)候是致命的。
我是菜鳥(niǎo),希望能幫到你,觀樓主英俊瀟灑,風(fēng)流倜儻,必當(dāng)世豪杰,誠(chéng)邀加入0x30百度貼吧,共商義舉,建不世之功!