error: cannot increment value of type 'char [6]'
error: cannot increment value of type 'char [6]'
我正在尝试学习 C/C++ 中的指针和字符串文字。
据我了解,字符串文字是字符数组,末尾为空 [=14=]
。此外,我们基本上可以对数组进行所有指针算术运算,如递增和递减。
但是当我尝试 运行 以下代码时:
#include <iostream>
using namespace std;
int main (){
char *c ="Hello";
char d[6];
while(*d++ = *c++);
cout<<c<<endl<<d;
}
我收到以下错误,
error: cannot increment value of type 'char [6]'
while(*d++ = *c++);
我对这段代码的假设是,string literal c
的值将被复制到 char array d
。
编辑:
现在我对这两个语句之间的区别有点困惑:
*(d++)
和
*(d+1)
假设d
是一个数组。
char d[6];
while(*d++ = *c++);
应重写为:
char d[6];
int idx = 0;
while(d[idx++] = *c++);
因为在char d[6];
中,d
是一个数组(不要和指针混淆),你不能改变数组的地址。另一方面,c
的类型是char *
,所以你可以修改它。
c++; // OK
c = &d[0]; // OK
d++; // Not allowed
d = c; // Not allowed
关于您添加的问题:
Difference between: *(d++) and *(d+1)
考虑以下示例:
int index1 = 42, index2 = 42;
int j = index1++; // j = 42 and index1 = 43
int k = (index2 + 1); // k = 43 and index2 = 42 (unchanged)
类似地,当您编写 *(d++)
时,您正在尝试访问(通过取消引用)当前位置,然后将指针本身递增到下一个位置。但是当你写 *(d + 1)
时,你正在访问下一个位置并且指针本身保持 不变 .
如果d
指针是常量或数组,则不允许第一种形式(其中 d 发生变化),但允许第二种形式(其中指针本身保持不变)。
Array name can't be a modifiable lvalue
所以
d++
可以写成
d = d+1;
所以有一个错误应该被修复为
while(d[index++] = *c++);
我正在尝试学习 C/C++ 中的指针和字符串文字。
据我了解,字符串文字是字符数组,末尾为空 [=14=]
。此外,我们基本上可以对数组进行所有指针算术运算,如递增和递减。
但是当我尝试 运行 以下代码时:
#include <iostream>
using namespace std;
int main (){
char *c ="Hello";
char d[6];
while(*d++ = *c++);
cout<<c<<endl<<d;
}
我收到以下错误,
error: cannot increment value of type 'char [6]'
while(*d++ = *c++);
我对这段代码的假设是,string literal c
的值将被复制到 char array d
。
编辑: 现在我对这两个语句之间的区别有点困惑:
*(d++)
和
*(d+1)
假设d
是一个数组。
char d[6];
while(*d++ = *c++);
应重写为:
char d[6];
int idx = 0;
while(d[idx++] = *c++);
因为在char d[6];
中,d
是一个数组(不要和指针混淆),你不能改变数组的地址。另一方面,c
的类型是char *
,所以你可以修改它。
c++; // OK
c = &d[0]; // OK
d++; // Not allowed
d = c; // Not allowed
关于您添加的问题:
Difference between: *(d++) and *(d+1)
考虑以下示例:
int index1 = 42, index2 = 42;
int j = index1++; // j = 42 and index1 = 43
int k = (index2 + 1); // k = 43 and index2 = 42 (unchanged)
类似地,当您编写 *(d++)
时,您正在尝试访问(通过取消引用)当前位置,然后将指针本身递增到下一个位置。但是当你写 *(d + 1)
时,你正在访问下一个位置并且指针本身保持 不变 .
如果d
指针是常量或数组,则不允许第一种形式(其中 d 发生变化),但允许第二种形式(其中指针本身保持不变)。
Array name can't be a modifiable lvalue
所以
d++
可以写成
d = d+1;
所以有一个错误应该被修复为
while(d[index++] = *c++);