方括号阵列

bob*_*obo 1 c++ arrays square-bracket

可能重复:
数组名是C中的指针吗?

所以,我通常使用指针声明数组.

但是,您也可以使用方括号表示法声明数组:

char a[] = "ok" ;
char b[] = "to" ;
char *pa = a ;

cout << "a " << sizeof( a ) << endl ;   // 3
cout << "pa " << sizeof( pa ) << endl ; // 4
Run Code Online (Sandbox Code Playgroud)

奇怪的是,sizeof( a )将是以字节为单位的数组的实际大小,而不是指针的大小.

我发现这很奇怪,因为指针在哪里呢?方括号声明的数组实际上是一种带(sizeof(char)*numElements)字节的数据结构吗?

此外,您无法将a重新分配给b:

a = b ; // ILLEGAL.
Run Code Online (Sandbox Code Playgroud)

这是为什么?似乎a 是数组而不是指向数组的指针("左操作数必须是l值"是a = b上面的错误).是对的吗?

Pra*_*rav 5

这是为什么?似乎a是数组而不是指向数组的指针("左操作数必须是l值"是上面a = b的错误).

a确实是一个数组类型而不是指针类型.您无法分配给数组,因为它是一个不可修改的左值.

当BTW数组传递给函数时,它会衰减指向第一个元素.