方括号阵列
Square bracket arrays
可能重复:
数组名称是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.
为什么?似乎是数组,而不是指向数组的指针("左操作数必须是l-value">是上面a = b
的错误(。是这样吗?
为什么?似乎a是数组,而不是指向数组的指针("左操作数必须是l-value"是上面a=b的错误(。
a
实际上是一个数组类型,而不是指针类型。不能分配给数组,因为它是一个不可修改的左值。
BTW数组在传递给函数时衰减为指向第一个元素的指针。
当您在声明中使用方括号时,实际上是在堆栈上分配空间。当您使用*
来声明指针时,您只是在声明一个指针。所以
char a[] = "ok";
将在堆栈上实际分配3个字节,并用字符串ok
填充。但是,如果你做
char a* = "ok";
它将为指针分配足够的空间,并将指针设置到包含字符串ok
的数据段中的一个位置(即,它被编译为常量(。
正确,a
的类型是长度为3的char数组。数组变量可以分配给指针变量,因为数组类型可以衰减为指向数组中第一个元素的指针。
简而言之,它是指向数组中第一个(第零个(元素的常量指针。
查看此处的"指针和阵列"部分
相关文章:
- OpenMP阵列性能较差
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 当我的阵列太大时出现分段错误
- 位阵列上的快速AND运算
- 对于C++,方括号中的标题必须总是在引号中的标题之上吗
- 阵列必须使用大括号封闭的初始器进行初始化
- 没有从阵列<float>到阵列<int>的可行转换
- C++动态安全 2D 交错阵列
- 检查由括号、方括号和大括号组成的一组方括号是否有效?
- 将平面阵列重塑为复杂的特征类型
- 如何使用英特尔 PIN 捕获阵列的所有负载?
- 为什么我能够为阵列分配比计算机实际拥有的内存更多的内存
- 库特<<恩德尔;不适用于打印 2D 阵列
- 数组类 阵列的打印输出
- 方括号 [] 和括号 () 之间的犰狳库差异
- 从较小的阵列到较大的阵列的元素级转换
- 仅在大型阵列上出现合并排序分段错误
- 从阵列C++中删除重复项
- 阵列的大小在C++中是否灵活?
- 方括号阵列