What's the difference among (const char *str) , (char const *str) and (char *const str)?
Possible Duplicate:
What is the difference between char * const and const char *?
const char * const versus const char *?
在C语言中定义函数时,我们可以使用(const char*str)、(char const*str)或(char*const str)作为变量,它们之间有什么区别?
前两个等价,
这里有一篇关于如何读取类型声明的有趣文章,以防您想检查它。
1 2 3 | const char * my_const_str; my_const_str ="Hello world!"; // ok my_const_str[0] ="h"; // error: my_const_str[0] is const! |
另一方面,
1 2 3 | char * const my_const_ptr = malloc(10*sizeof(char)); my_const_str[0] ="h"; // ok my_const_str ="hello world"; // error, you would change the value of my_const_str! |
读取C声明为:
从变量开始。向右看,向左看,然后再向右看(比如在英国过马路)。当你看到
"str是指向常量char的指针"
1 2 3 4 5 6 | char ch = 'x'; const char cch = 'y'; const char *str = &cch; char const *str = &cch; char * const str = &ch; |
1 2 3 | const char * str1: declare str as pointer to const char char const * str2: declare str as pointer to const char char * const str3: declare str as const pointer to char |
所以在前两种情况下,指针是可变的,但指针引用的数据不是。
在最后一种情况下,指针不是可变的,但里面的数据是可变的。
那么,让我们来看一些操作:
1 2 3 4 5 6 7 | str1[0]; // legal; str1[0] += 3; // illegal; str1 = NULL; // legal; str3[0]; // legal; str3[0] += 3; // legal; str3 = NULL; // illegal; |