数组名称和指针的区别是什么?

r123ed 2020-07-14 08:24:52
#include<iostream>
using namespace std;


int main()
{
int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
int* p = a;
cout << (p == a) << endl;;
p += 1; // it's ok
a += 1; // error!
cout << a << endl;
cout << p << endl;
return 0;
}
p+1不会报错,a+1却出错
...全文
78 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chxchxkkk 2020-07-14
  • 打赏
  • 举报
回复
数组名是地址常量,常量不可以+=运算 p是指向数组首地址的指针变量,变量可以自增运算
棉猴 2020-07-14
  • 打赏
  • 举报
回复
所以,如果代码写成
p = a + 1;
就没错。
LJY_rookie 2020-07-14
  • 打赏
  • 举报
回复
a代表地址是常量不可赋值
qiu_shaofeng 2020-07-14
  • 打赏
  • 举报
回复
数组名是地址常量,指针是变量,p=a+1可以的。对常量赋值是不行的。
真相重于对错 2020-07-14
  • 打赏
  • 举报
回复
所谓+=1 代表本身移动一个位置,而a是数组,它的位置是只读的,不可移动的 就好比以下代码也是不能实现的 int a[3]; int b[3]; 你能这样吗? a=b; 必须 auto x=a+1;
千梦一生 2020-07-14
  • 打赏
  • 举报
回复
区别在于编译器把数组名称认作数组名称,把指针认作指针。
相同点在于值相同。

65,179

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧