如果将数组名称视为指针,为什么在递增数组时会出现Lvalue所需的编译时错误
If an array name is treated as a pointer, why do I get a compile time error of Lvalue required when incrementing an array?
int main()
{
int a[]={2,3,4,5,6};
int j;
for(j=0;j<5;j++)
{
printf("%dn",*a);
a++;
}
return;
}
给出"Lvalue
必需"错误,但
int main()
{
int a[]={2,3,4,5,6};
int *p,j;
p=a;
for(j=0;j<5;j++)
{
printf("%dn",*p);
p++;
}
return;
}
没有,为什么????
虽然密切相关,但数组不是指针。数组的名称只是一个标签,用于标识某些分配的内存(因此,当您尝试修改它时会出现 Lvalue 错误(。
数组不是指针。在大多数表达式中,数组会自动转换为指针。此转换的结果不再是数组;它只是一个指针值。
++
运算符不能仅对值进行操作。它必须有一个要对其执行操作的对象。
例如,考虑int x = 3; (x+5)++;
.x+5
的结果是 8。这不是x
.结果只是一个值,而不是一个对象,因此没有包含 8 的对象可供++
操作。这是一个错误。
类似地,如果a
是int
数组,则a++
等价于((int *) a)++
。++
并没有试图对a
采取行动;它试图根据将a
转换为指针的结果进行操作。
始终转换为指向第一个元素的指针,除非数组表达式是 sizeof
、&
或 _Alignof
的操作数,或者是用于初始化数组的字符串文本。
这将显示所有数组数据。
#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
int main()
{
int a[]={2,3,4,5,6};
int *p,j;
p=a;
for(j=0;j<5;j++)
{
printf("%dn",p[j]);
}
return 0;
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '