例程2的效率要遠高過例程1的原因主要有以下兩處:
第一:
例程1中的
test get_score()
呼叫的時候在內部要在棧空間開闢乙個名為pn的結構體變數,程式pn的時候又再次在棧記憶體空間內自動生成了乙個臨時結構體變數temp,在前面的教程中我們已經說過,它是乙個copy,而例程2中的:
void get_score(test &pn)
卻沒有這一過程,不開闢任何新的記憶體空間,也沒有任何臨時變數的生成。
第二:
例程1在mian()中,必須對返回的結構體變數進行一次結構體變數與結構體變數直接的相互賦值操作。
for(int i=0;ifor(int i=0;i函式也是可以返回結構體應用的,例子如下:
#include
#include
using
namespace std;
struct test
; test a;
test &get_score(test &pn)
void print_score(test &pn)
呼叫get_score(a);結束並返回的時候,函式內部沒有臨時變數的產生,返回直接吧全域性結構變數a的記憶體位址賦予結構引用sp
最後提一下指標的引用
定義指標的引用方法如下:
void
main()
pn就是乙個指向指標的引用,它也可以看做是指標別名,總之使用引用要特別注意它的特性,它的操作是和普通指標一樣的,在函式中對全域性指標的引用操作要十分小心,避免破壞全域性指標!
戰30天C 入門極限 C C 中的結構體(1)
什麼是結構體?簡單的來說,結構體就是乙個可以包含不同資料型別的乙個結構,它是一種可以自己定義的資料型別,它的特點和陣列主要有兩點不同,首先結構體可以在乙個結構中宣告不同的資料型別,第二相同結構的結構體變數是可以相互賦值的,而陣列是做不到的,因為陣列是單一資料型別的資料集合,它本身不是資料型別 而結構...
挑戰30天C 入門極限 C 中布林型別
布林型別物件可以被賦予文字值true或者false,所對應的關係就是真與假的概念。我們通常使用的方法是利用他來判斷條件的真與假,例如下面的 include using namespace std void main void 但是一些概念不清的人卻不知道布林型別的物件也可以被看做是一種整數型別的物件...
C 中的結構體(C 入門)
什麼是結構體?簡單的來說,結構體就是乙個可以包含不同資料型別的乙個結構,它是一種可以自己定義的資料型別,它的特點和陣列主要有兩點不同,首先結構體可以在乙個結構中宣告不同的資料型別,第二相同結構的結構體變數是可以相互賦值的,而陣列是做不到的,因為陣列是單一資料型別的資料集合,它本身不是資料型別 而結構...