C++,为什么array = ptr合法?

0 c++ syntax

最近我看到了这段代码.这行不应该是编译错误吗?char arr[4]="Abc";

这里发生了什么?是arr指针吗?将char*复制到堆栈中的数组中?这在所有版本的C++中都是合法的(那么C呢?).我测试并看到这适用于VS和代码垫我相信使用gcc

-edit-为了好玩,我尝试用静态const char*替换"Abc".它给了我一个无效的初始化错误.

int main()
{
    int j=97;
    char arr[4]="Abc";
    printf(arr,j);
    getch();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

CB *_*ley 8

array = ptr不是合法的赋值(如果array有一个数组类型,并ptr具有相应的指针类型).但是,在您展示的代码中,=引入了初始化程序,因为它是声明的一部分.这不是一项任务.

初始化char带有字符串常量的数组是合法的.

  • @ acidzombie24:从语言的角度来看,`array`具有自动存储持续时间,所以它一直存在到声明它的作用域的末尾.俗话说,它在堆栈上. (5认同)