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++);