第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從C中的函數(shù)返回`struct`

從C中的函數(shù)返回`struct`

C
德瑪西亞99 2019-10-14 15:31:50
今天,我在教學上幾個朋友如何用C struct秒。其中一個詢問您是否可以struct從函數(shù)中返回a ,我回答:“不!您將返回指向動態(tài)malloced struct的指針。”來自主要從事C ++工作的人,我期望無法struct通過值返回s。在C ++中,您可以operator =為您的對象重載,并且完全有意義的是有一個函數(shù)可以按值返回您的對象。但是,在C語言中,您沒有該選項,因此讓我開始思考編譯器的實際作用??紤]以下:struct MyObj{    double x, y;};struct MyObj foo(){    struct MyObj a;    a.x = 10;    a.y = 10;    return a;}        int main () {    struct MyObj a;    a = foo();    // This DOES work    struct b = a; // This does not work    return 0;}    我知道為什么struct b = a;不起作用-您不能operator =為您的數(shù)據(jù)類型超載。a = foo();編譯效果如何?它不是什么意思struct b = a;嗎?可能要問的問題是:return與=簽字共同聲明的語句到底做了什么?[edit]:好的,我只是指出這struct b = a是一個語法錯誤-沒錯,我是個白癡!但這使事情變得更加復雜!使用struct MyObj b = a確實有效!我在這里想念什么?
查看完整描述

3 回答

?
Helenr

TA貢獻1780條經驗 獲得超4個贊

您可以從函數(shù)返回結構(或使用=運算符),而不會出現(xiàn)任何問題。這是語言中定義明確的部分。唯一的問題struct b = a是您沒有提供完整的類型。  struct MyObj b = a會很好。您也可以將結構傳遞給函數(shù)-為了傳遞參數(shù),返回值和分配,結構與任何內置類型完全相同。


這是一個簡單的演示程序,可完成所有這三個操作-將結構作為參數(shù)傳遞,從函數(shù)返回結構,并在賦值語句中使用結構:


#include <stdio.h>


struct a {

   int i;

};


struct a f(struct a x)

{

   struct a r = x;

   return r;

}


int main(void)

{

   struct a x = { 12 };

   struct a y = f(x);

   printf("%d\n", y.i);

   return 0;

}

下一個示例幾乎完全相同,但是使用內置int類型進行演示。對于參數(shù)傳遞,賦值等的值傳遞,這兩個程序具有相同的行為:


#include <stdio.h>


int f(int x) 

{

  int r = x;

  return r;

}


int main(void)

{

  int x = 12;

  int y = f(x);

  printf("%d\n", y);

  return 0;

}


查看完整回答
反對 回復 2019-10-14
?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

進行諸如之類的調用時a = foo();,編譯器可能會將結果結構的地址壓入堆棧,并將其作為“隱藏”指針傳遞給foo()函數(shù)。實際上,它可能變?yōu)椋?/p>


void foo(MyObj *r) {

    struct MyObj a;

    // ...

    *r = a;

}


foo(&a);

但是,此操作的確切實現(xiàn)取決于編譯器和/或平臺。正如Carl Norum所指出的,如果結構足夠小,它甚至可能會完全傳回寄存器中。


查看完整回答
反對 回復 2019-10-14
  • 3 回答
  • 0 關注
  • 759 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號