我必须在我的代码中使用这些表:
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"},
};
我有一些char *变量只能通过指令
分配entry = scale_table[i][j];
导致警告“从指针目标类型中分配'const'限定符”。变量显然不是const,我不想将const指针转换为非const,因为字符串永远不会被修改。即指针变量不是const,但总是指向常量值。
这个的正确语法是什么?
答案 0 :(得分:4)
将entry
声明为const char *
(或等效地,char const *
)。这是一个指向常量字符的非常量指针:您可以更改指针本身以使其指向不同的字符,但不能通过指针修改实际字符。
一个常量指针 - 一个你无法改变以指向其他东西的指针 - 将char * const
或char const * const
来阻止指针和被修改的指向字符。
读取涉及const
的类型的最简单方法是从右到左:char const *
是指向常量char
的指针,而char * const
是指向{{char
的常量指针1}}。 const
关键字始终适用于其左侧的类型。 (作为一种特殊情况,如果它是在开头写的,那么它的左边没有任何东西,它就适用于它右边的类型。这就是为什么const char
等同于char const
。)