2014-03-05 52 views
1

我有這樣的在我的碼錶工作:如何保持變量的指針,只有持有常量值

const char *scale_table [4][8] = { 
{ "0.0094","0.00752","0.00564","0.0047","0.00376","0.0031333333","0.0025066667","0.00188"}, 
{ "0.0188","0.01504","0.01128","0.0094","0.00752","0.0062666667","0.0050133333","0.00376"}, 
{ "0.0376","0.03008","0.02256","0.0188","0.01504","0.0125333333","0.0100266667","0.00752"}, 
{ "0.0752","0.06016","0.04512","0.0376","0.03008","0.0250666667","0.0200533333","0.01504"}, 

};

我有一些字符*變量只能取得指令

entry = scale_table[i][j]; 

這將導致警告「分配丟棄‘常量’指針目標類型的限定詞」分配。這些變量顯然不是const的,我不想將const指針轉換爲非const,因爲這些字符串從不修改。即指針變量不是常量,而是始終指向常量值。

這是什麼正確的語法?

回答

4

聲明entryconst char *(或等同地,char const *)。這是一個非常量指針,指向常量字符:您可以更改指針本身以使其指向不同的字符,但不能通過指針修改實際字符。

恆定指針 - 一個你無法改變,以點別的東西 - 將是char * const,或者char const * const同時防止指針被修改指向的字符。

閱讀涉及const類型的最簡單的方法是由右至左:char const *是一個指向常量char,並char * const是一個常量指針charconst關鍵字始終適用於其左側的類型。 (作爲一種特殊情況,如果它在開頭寫入以便其左側沒有任何內容,則適用於其右側的類型,因此const char相當於char const。)