回覆列表
  • 1 # 使用者5916393697425

    方法是有的,不過並不太贊成這種做法,不過如果僅僅是作為初始化使用的話,可以先定義一個初始化的函式,並保證在別的地方不再呼叫這個函式,倒也可以行,程式碼如下:

    #include

    #include

    typedef struct

    {

    int* const p;

    } C;

    int main()

    {

    int i = 0;

    C* c = (C*)malloc(sizeof(C));

    printf("Old: 0x%08X\n", c->p);

    (int*)(c->p) = &i; // 最關鍵的一步。

    printf("new: 0x%08X\n", c->p);

    free(c);

    return 0;

    }

    ----------------------------------- 補充1

    C中是沒有建構函式的概念的,所以妄圖想C++那樣在物件構造的同時對物件進行初始化是誤解的,唯一的方法就是寫一個特殊的函式,用這個函式來初始化一個結構體的記憶體,甚至可以用memset()函式都可以,所以你的要求已經退化成如何對結構體進行初始化了,這是很多C++程式設計師回頭寫C程式的時候,都會反覆思考的問題。

  • 中秋節和大豐收的關聯?
  • 摩托車加機油加多少最合適?