方法是有的,不過並不太贊成這種做法,不過如果僅僅是作為初始化使用的話,可以先定義一個初始化的函式,並保證在別的地方不再呼叫這個函式,倒也可以行,程式碼如下:
#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程式的時候,都會反覆思考的問題。
方法是有的,不過並不太贊成這種做法,不過如果僅僅是作為初始化使用的話,可以先定義一個初始化的函式,並保證在別的地方不再呼叫這個函式,倒也可以行,程式碼如下:
#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程式的時候,都會反覆思考的問題。