的另一個答案的問題是數據仍然可以通過其他機構修改爲 。
const struct not_const* c = (const struct not_const*)&nc;
nc->a=some_other_value; // will still change the data.
一種解決方案是要分配給c
一些存儲器和複製nc
它到它。
non_const obj1;
printf("Enter non_const int : ");
scanf("%d",&obj1.a);
obj1.b="SomeString";
/* Declare a const version */
const non_const *obj3;
/* Allocate the memory */
obj3=malloc(sizeof(obj1);
/* Copy the first object */
memcpy(obj3,&obj1,sizeof(obj1));
/* You may see a warning: passing argument 1
* of ‘memcpy’ discards ‘const’ qualifier from pointer target type
* which can be neglected if i am not mistaken
*/
如果你有'const'成員,你需要'const'初始值設定項。 –
'char * b'的const版本是'char * const b',而不是'const char *'。指針應該是const的,而不是指向它的'char'。 – mch
爲什麼你想要這樣的const結構?爲什麼不簡單地使用'const not_const'? – Holt