c++ - 方括号数组

标签 c++ arrays square-bracket

<分区>

Possible Duplicate:
Is array name a pointer in C?

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

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

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

cout << "a " << sizeof( a ) << endl ;   // 3
cout << "pa " << sizeof( pa ) << endl ; // 4

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

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

此外,您不能将 a 重新分配给 b:

a = b ; // ILLEGAL.

这是为什么呢?似乎 a 是数组 而不是指向数组的指针(“左操作数必须是左值”a = b< 的错误 上面)。是吗?

最佳答案

Why is that? It seems as though a is the array and not a pointer to the array ("left operand must be l-value" is the error for a = b above).

a 确实是数组类型而不是指针类型。 您不能分配给数组,因为它是不可修改 左值。

顺便说一句,数组在传递给函数时衰减为指向第一个元素的指针。

关于c++ - 方括号数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5570386/

相关文章:

powershell - 复制文件名中带有方括号 [] 的文件并使用 * 通配符

c++ - 在 Visual Studio 中暂时禁用包含的编译警告

c++ - 用于检测 C++ 中 ABI 中断的静态分析工具

java - java中需要从json数组中获取id值

java - 在 Java 中,什么时候 {a,b,c,...} 数组简写不合适,为什么?

Python 括号子字符串不起作用,为什么?

javascript - 使用 if 和括号符号理解 reduce 函数

c++ - const_cast 的奇怪行为

c++ - 如何快速摆脱 std::cout

来自字符串的 C++ 字节数组