1樓:邵景輝性略
你說的這種情況,函式返回的是整個結構體。
無論這個結構體中包含了多少個成員,乙個結構體就只是乙個變數(哪返返結構體本身就是乙個變數,無論它包含了多少個成員)。這樣,函式返回乙個結構體就意世滑味著函式把結構體中所有的成員都返回了。c語言函式的確只李飢能有乙個返回值。
用返回結構體的方式就很好地解決了需要返回多個返回值的問題。
return後面沒有0或1,說明這個函式是void型別的,這類函式本來就不需要有返回值,這裡的return的意思並不是要返回某個值,而是退出這個函式的意思。
2樓:針白亦邱湘
你這樣做就不對,student
處在棧區,這樣返回你沒辦法用兆褲另乙個。
struct
接收它,因為在外面。
struct
不存在,所以。
首先得定義。
struct
tagstudent
定在全域性。對於標準c
應該用乙個指標引數。
voidfoo(struct
tagstudent
output)
返回值為指標也是不合理的,因為呼叫者這邊不知道這個返回是分配來的記憶體還是指向乙個全域性變數,有一種情況可以認為就是全域性的變數就是返回值申明為。
conststruct
tagstudent
c++可以用乙個引用引數比較合理。
voidfoo(struct
tagstudent
output)
返回結構也並不是不行,但它可能會產生大的記憶體復帶猜碧制,如果這個結構很大,你用蠢舉乙個結構接收會產生乙個很大的複製過程,這本身顯得沒必要,完全可以用乙個指標引數送進去用同乙個記憶體位址處理。
3樓:林柯伊南
可以返回乙個結構型別指標,這樣就可以在main函式中訪問其他函式中定義的結構的所有成員。。。比如如下**:
#include
struct stu
typedef struct stu node;
void* func()
int main()
c語言返回結構體函式返回值應定義哪種型別?
4樓:太可怕
你這樣做就不對, student 處在棧區, 這樣返回你沒辦法用另乙個 struct 接收它, 因為在外面 struct 不存在, 所以。
首先得定義 struct tagstudent 定在全域性。
對於標準c 應該用乙個指標引數。
void foo(struct tagstudent *output)
返回值為指標也是不合理的, 因為呼叫者這邊不知道這個返回是分配來的記憶體還是指向乙個全域性變數,有一種情況可以認為就是全域性的變數就是返回值申明為 const struct tagstudent *
c++ 可以用乙個引用引數比較合理。
返回結構也並不是不行, 但它可能會產生大的記憶體複製, 如果這個結構很大, 你用乙個結構接收會產生乙個很大的複製過程, 這本身顯得沒必要, 完全可以用乙個指標引數送進去用同乙個記憶體位址處理。
c語言函式能不能返回結構體
5樓:12345額時代
c語言函式可以返回結構體,操作方法如下:
1、首先在電腦中開啟visual studio新建專案,給這個結構體取個名字叫student。
2、然後新增變數,如下圖所示。
3、然後給結構體型別指標p申請堆空間,如下圖所示。
4、接著使用for迴圈給結構體賦值,如下圖所示。
5、最後在通過for迴圈列印輸出,這樣就完成就結構體的基本建立,結尾不要忘了使用free(p):釋放申請的堆空間。
6樓:
可以。例如常用的typedef 可以把結構體定義成一種新的"變數型別",語法上就同int,float這種簡單變數型別一樣。 c語言函式就能return了。
7樓:網友
當然能返回結構體的,不過是需要用指標來返回的。
下面我編寫乙個簡單的例項,你就清楚了。
#include
struct lab
struct lab lab_val=; //宣告結構體變數struct lab *plab; //宣告結構體指標//---返回結構體指標,之後就可以用該指標訪問結構體中所有的變數了。
struct lab *test(struct lab *pstruct)
void main(void)
8樓:
能。主調函式必須用相同型別的結構體變數接收!舉例**如下:
#include ""//if the vc++,with this line.
#include ""
#include ""
struct abc;
struct abc myfun(void);//宣告乙個結構體區域性變數x並初始化。
return x;//返回區域性變數結構體x}int main(void)
9樓:網友
當然能呀。
只要在定義函式時,返回型別宣告你要返回的型別就可以呵。
10樓:使用者已註冊
變數x是在函式內定義的,因此函式結束時x的記憶體被**,返回值x是無效的,這種用法是錯誤的。
c語言中函式返回值可以是陣列、字串和結構體嗎?
11樓:網友
因為陣列會自動退化成指標,c字串實際上也是陣列,因此不能作為c函式的返回值,返回結構體應該是沒問題的……
12樓:網友
返回值只能是乙個值沒有錯,陣列可以返回,但是返回的只是陣列的首位址,結果是位址,還是乙個值,除非你返回的是陣列裡基本個元素。
13樓:網友
返回值可以是字串(c++有string類),結構體,陣列的指標。
14樓:桓沛凝
可以的,返回的是一種型別。陣列,字串,結構體都是型別。
15樓:網友
1、ansi c語言標準,明確規定 陣列型別和函式型別不可以做為返回值。
解決這種返回值的方法是通過指標來間接返回,即使用陣列指標和函式指標。這可以做為c語言引入指標的另乙個理由。
2、字串是陣列的一種,是字元陣列,所以同樣不可以作為返回值。
3、結構體型別可以做為返回值,c語言設計者當時引入struct結構體的概念,目的是為了增加一種建立c語言新型別的機制, 換句話說它希望通過struct建立的型別,像內建的int float型別一樣使用方便。
16樓:王囧囧
返回陣列的話要注意生存期的問題:
1.函式可以返回陣列指標,但並非陣列中的每一項,因此算是乙個值2.函式中定義的區域性陣列在函式退出時會被銷燬,返回陣列指標沒有意義3.
全域性陣列的話,在函式中做得更改會被保留,一般不用刻意再次返回陣列指標了。
分配的記憶體,可以返回其位址,此段記憶體是在堆上分配的,函式退出時不會銷燬。
C語言如何把函式的返回值傳遞給另函式
蕭竣閏 在另一個函式內呼叫該函式。從而得到該函式的返回值,實現傳遞。例 int sum int m,int n void main 此例中,main函式在輸出語句中呼叫sum函式從而得到sum函式的返回值並輸出 用一個變數 記住 函式的返回值,然後在另一個函式中使用這個變數 要把變數設定成全域性變數...
c語言規定,函式返回值的型別由什麼決定
我來跟你談談情 c語言規定,函式返回值的型別是由函式首部定義的型別決定。函式返回值應與首部定義的型別一致,如若不一致,則自動將返回值強制轉換為函式首部定義的型別。沒有定義型別時預設為int型。也就是說你的函式是什麼型別,返回值就是什麼型別。比如 函式定義 int fun int a,char b 返...
c語言結構體的定義,C語言結構體的定義
滑映寒愈霽 第二個struct student是定義了一個student結構體,這個明白吧。第一個是用typedef把struct student這個結構體型別名字重新定義為student,也就是說struct student和student表示同一個事物,都是一個型別的識別符號,比如 typede...