我到处都看到了:
const char *fmt
而不是char * const fmt
。我是否误解了某些内容,或者这只是对api设计师如何用C表达事物的误解?
根据我的理解,
const char *a
,是指向char的指针,您无法将其更改为指向另一个char。char * const a
是指向char的指针,您无法取消引用以更改值。const char * const
a是指向char的指针,您无法将其更改为指向另一个char(或包含多个chars的连续块的第一个char),并且您无法通过取消引用来更改指向的char的值。 提前致谢。
看起来我已经反过来了:
char *elephant = "elephant";
const char *p1 = "wolf";
char * const p2 = "sheep";
int main(int argc, char **argv)
{
p1 = elephant;
*p1 = elephant[0]; /* error: assignment of read-only location '*p1' */
p2 = elephant; /* error: assignment of read-only variable 'p2' */
*p2 = elephant[0];
return 0;
}
类似:
#define ptrto(X) X *
#define readonly(X) X const
char const a = 'a';
const char b = 'b';
readonly(ptrto(char)) p1 = "p1";
ptrto(readonly(char)) p2 = "p2";
int main(int argc, char **argv)
{
p1 = &a; /* error: assignment of read-only variable 'p1' */
*p1 = a;
p2 = &a;
*p2 = a; /* error: assignment of read-only location '*p2' */
p1 = &b; /* error: assignment of read-only variable 'p1' */
*p1 = b;
p2 = &b;
*p2 = b; /* error: assignment of read-only location '*p2' */
return 0;
}
答案 0 :(得分:0)
请参阅http://en.cppreference.com/w/c/language/const
const char *
== char const *
是指向不可修改的字符数据的指针。
char * const
是一个不可修改的指向字符数据的指针。