c語言函數返回結構體
㈠ c語言中函數返回值可以是數組、字元串和結構體嗎
//語法編碼規則的角度看
ANSIC語言標准,明確規定數組類型和函數類型不可以做為返回值。
解決這種返回值的方法是通過指針來間接返回,即使用數組指針和函數指針。這可以做為c語言引入指針的另一個理由。
結構體類型可以做為返回值,我猜測C語言設計者當時引入struct結構體的概念,目的是為了增加一種建立C語言新類型的機制,換句話說它希望通過struct建立的類型,像內置的int float類型一樣使用方便。
//從匯編角度來看
有兩種返回值方法,第一種是直接返回到寄存器的,第二種是類似於結構體返回值的那樣建立臨時存儲區的返回方式
比如int 返回值類型、指針返回值類型,在ia32平台上都是直接返回到eax寄存器不管是vc還是gcc,對於像float 類型的浮點返回值類型,在ia32平台,往往藉助於fpu浮點運算器部件中的寄存器存儲於棧中,第三類就是像struct結構體返回值,它需要建立臨時對象,對於c語言來說引入一個臨時內在區域是問題不大的,但是對於c++這個有時候是致命的。
我是菜鳥,希望能幫到你,觀樓主英俊瀟灑,風流倜儻,必當世豪傑,誠邀加入0x30網路貼吧,共商義舉,建不世之功!
㈡ 求高手指教c語言函數怎麼返回結構體
#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 %d %d %p ",x.a,x.b,x.p,y.a,y.b,y.p);
}
(2)c語言函數返回結構體擴展閱讀:
在C語言中,結構體(struct)指的是一種數據結構,是C語言中聚合數據類型(aggregate data type)的一類。結構體可以被聲明為變數、指針或數組等,用以實現較復雜的數據結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。
C++提供了許多種基本的數據類型(如int、float、double、char等)供用戶使用。由於程序需要處理的問題往往比較復雜,而且呈多樣化,已有的數據類型顯得不能滿足使用要求。C++允許用戶根據需要自己聲明一些類型,用戶可以自己聲明的類型還有結構體類型(structure)、共用體類型(union)、枚舉類型(enumeration)、類類型(class )等,這些統稱為用戶自定義類型(user-defined type,UDT)。
㈢ c語言結構體函數返回問題
你的Change1和Change4不能改變s1的值,因為這兩個函數的參數是形參,在傳遞參數時會產生一個s1的副本,它不會改者仿變實參(s1)的值,函數里的變數是s1的一個副本,作用域僅限於函數體內,函數調用結束後,副殲哪本銷毀,而s1的值並沒有因首改纖為函數的執行而改變。而Change2傳遞的是指針,指向的就是s1,在函數體的操作就是對s1的操作,這樣函數就可以改變s1的值。
㈣ c語言函數能不能返回strut,不是指針
可以返回結構體,但一般不推薦這么做,特別橡滑是結構體比較大的襪如凳情況下,
因為結構體都是存在棧上,太大可能導致棧溢出,並且運行效率比告旅較低。
㈤ c語言中返回結構體數組
結構體名 * 函數雀緩缺名(參數列表)
{
return (結構體數組頃辯首哪雹地址);
}
㈥ C語言結構體函數的返回值是結構體結構體變數中的信息
你說的這種情況,函數返回的是整個結構體,無論這個結構體中包含了多少個成員,一個結構體就只是一個變數(結構體本身就是一個變數,無論它包含了多少個成員)。這樣,函數返回一個結構體就意味著函數把結構體中所有的成員都返回了。C語言函數的確只能有一個返回值,用返回結構體的方式就很好地解決了需要返回多個返回值的問題。
return後面沒有0或1,說明這個函數是void類型的,這類函數本來就不需要有返回值,這里的return的意思並不是要返回某個值,而是退出這個函數的意思。
㈦ C語言如何返回結構體數組
題設是有問題的
首先你定義了一個結構體_STR_POINT 並且自定義了一個類型STR_POINT
現在你函數的返回值是STR_POINT類型 而你要求返回STR_POINT數組
STR_POINT數組的類型是STR_POINT[]顯然預期類型和返回類型不同啊
這是編譯器的語法預警
㈧ C語言函數中如何返回一個結構體類型
如:
structststst{
inta;
intb;
charc;
}
structstststf1()
{
/*寫好代碼*/
structstststss={3,5,'J'};
returnss;
}
㈨ 請教:C語言函數的返回值類型能否為結構體
能
只要在定義函數時,返回類型聲明你要返回的類型就可以
參考代碼:
//#include "stdafx.h"//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};//聲明一個結構體局部變數x並初始化
return x;//返回局部變數結構體x
}
int main(void){
struct ABC y=myfun();//聲明一個同類型結構體變數y並將函數返回值賦給它
printf("%s %d\n",y.name,y.n);//打出來看看
return 0;
}
㈩ C語言中函數的返回值可以一個結構類型嗎
可以的粗基 比如在做鏈表的增刪改查時基本上都會用到裂基返回結構體類型,如返回頭結點。你可以到網上肆凳謹看看關於鏈表的例子。相信你會明白的。