1. 程式人生 > >結構體定義與作為函式引數的結構

結構體定義與作為函式引數的結構

可以參考《C和指標》P206

一、在結構體內部如下定義是違法的:

struct s

{

    int a;

    struct s b;

}

因為內部包含自己的成員永遠不會終止,類似遞迴。

但是如下定義是合法的:

struct s

{

    int a;

    struct s *b;

}

這是因為其內部是個指向該結構體型別的指標,而指標的長度是可以確定的,一般四個位元組。

二、由於在用結構體作函式形參時,是傳值的方式傳遞給函式,這樣的話,如果函式呼叫時,傳遞的結構體引數比較多,容易造成效率較低。因此,用結構體的指標作為函式的形參,進行傳址操作,把它壓到堆疊上能提高效率。

三、結構體名和陣列名

結構體和其他int char一樣,當結構體名作為右值使用時,它表示儲存在結構體中的值,當它作為左值使用時,他表示結構儲存的記憶體位置。

但是,當陣列名作為右值使用時,它的值是一個指向陣列第一個元素的指標,且由於它是一個常量指標不能為作為左值使用。