e******o 发帖数: 757 | 1 刚刚写了一个小code
char *a = "abc";
char b[] = "abc";
reverse(a, a+3);
reverse(b, b+3);
第一个reverse报错了,第二个没有,是不是char *a ="abc" 得到的是pointer to
constant, 而char b[] = "abc" 得到的是一个regular 的pointer?
如果是的话,能不能这样解释,char *a="abc" 是不是先生成一个临时的const char *
temp = "abc", 然后a == temp. 而 char b[] = "abc" 是建立一个名字为 b 的array. | d****i 发帖数: 4809 | 2 string literal in C is treated as const char* type, thus nonmodifiable
*
array.
【在 e******o 的大作中提到】 : 刚刚写了一个小code : char *a = "abc"; : char b[] = "abc"; : reverse(a, a+3); : reverse(b, b+3); : 第一个reverse报错了,第二个没有,是不是char *a ="abc" 得到的是pointer to : constant, 而char b[] = "abc" 得到的是一个regular 的pointer? : 如果是的话,能不能这样解释,char *a="abc" 是不是先生成一个临时的const char * : temp = "abc", 然后a == temp. 而 char b[] = "abc" 是建立一个名字为 b 的array.
| h***o 发帖数: 30 | 3 In C, a string literal should be of type 'char[SOME_CONST]'
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
Page 144
【在 d****i 的大作中提到】 : string literal in C is treated as const char* type, thus nonmodifiable : : * : array.
| B*********r 发帖数: 62 | 4 Make it clear that you are intializing a and b, not assigning. So in the
first line, a pointer is initialized to the head of a string literal, and in
the second line an array is allocated and intialized.
*
array.
【在 e******o 的大作中提到】 : 刚刚写了一个小code : char *a = "abc"; : char b[] = "abc"; : reverse(a, a+3); : reverse(b, b+3); : 第一个reverse报错了,第二个没有,是不是char *a ="abc" 得到的是pointer to : constant, 而char b[] = "abc" 得到的是一个regular 的pointer? : 如果是的话,能不能这样解释,char *a="abc" 是不是先生成一个临时的const char * : temp = "abc", 然后a == temp. 而 char b[] = "abc" 是建立一个名字为 b 的array.
| s********k 发帖数: 6180 | 5 这个归于本版10大话题,应该置顶了
*
array.
【在 e******o 的大作中提到】 : 刚刚写了一个小code : char *a = "abc"; : char b[] = "abc"; : reverse(a, a+3); : reverse(b, b+3); : 第一个reverse报错了,第二个没有,是不是char *a ="abc" 得到的是pointer to : constant, 而char b[] = "abc" 得到的是一个regular 的pointer? : 如果是的话,能不能这样解释,char *a="abc" 是不是先生成一个临时的const char * : temp = "abc", 然后a == temp. 而 char b[] = "abc" 是建立一个名字为 b 的array.
| b*******s 发帖数: 5216 | 6 第一个指向常量区,第二个复制分配了一个4个char长度的串
*
array.
【在 e******o 的大作中提到】 : 刚刚写了一个小code : char *a = "abc"; : char b[] = "abc"; : reverse(a, a+3); : reverse(b, b+3); : 第一个reverse报错了,第二个没有,是不是char *a ="abc" 得到的是pointer to : constant, 而char b[] = "abc" 得到的是一个regular 的pointer? : 如果是的话,能不能这样解释,char *a="abc" 是不是先生成一个临时的const char * : temp = "abc", 然后a == temp. 而 char b[] = "abc" 是建立一个名字为 b 的array.
| e******o 发帖数: 757 | 7 got it. thank you all very much. |
|