鱼C论坛

 找回密码
 立即注册
查看: 1051|回复: 3

[已解决]这几种指针与数组的赋值怎么区分

[复制链接]
发表于 2023-6-8 15:10:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
*p=&a[0]与p=&a[0]与*p=a[0]与p=a
最佳答案
2023-6-8 15:14:13
在C/C++中,这四种表达式中的指针与数组的赋值操作具有不同的意义。我会一一为你解释:

1.  *p=&a[0] : 这种表达式在C/C++中通常是错误的,因为  *p  是  p  指向的值,而  &a[0]  是数组  a  的第一个元素的地址。所以这种操作相当于尝试将一个地址赋给一个非指针的值,通常是不允许的。

2.  p=&a[0] : 这是正确的。这种操作将  p  设置为指向数组  a  的第一个元素的地址。换句话说, p  现在指向数组  a  的第一个元素。

3.  *p=a[0] : 这是正确的。这种操作将数组  a  的第一个元素的值赋给  p  所指向的位置。换句话说, p  所指向的位置现在包含了  a[0]  的值。

4.  p=a : 这也是正确的。在这种情况下, p  被设置为指向数组  a  的开始处。这是因为在C/C++中,数组名(在这种情况下为  a )可以作为一个指针,指向数组的开始处。

需要注意的是,所有这些操作都假定  p  已经被声明为一个正确的类型,如  int *p;  对于一个整型数组  a 。这些操作也要求  p  不是一个常量指针,因为常量指针不能被重新指定。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-8 15:14:13 | 显示全部楼层    本楼为最佳答案   
在C/C++中,这四种表达式中的指针与数组的赋值操作具有不同的意义。我会一一为你解释:

1.  *p=&a[0] : 这种表达式在C/C++中通常是错误的,因为  *p  是  p  指向的值,而  &a[0]  是数组  a  的第一个元素的地址。所以这种操作相当于尝试将一个地址赋给一个非指针的值,通常是不允许的。

2.  p=&a[0] : 这是正确的。这种操作将  p  设置为指向数组  a  的第一个元素的地址。换句话说, p  现在指向数组  a  的第一个元素。

3.  *p=a[0] : 这是正确的。这种操作将数组  a  的第一个元素的值赋给  p  所指向的位置。换句话说, p  所指向的位置现在包含了  a[0]  的值。

4.  p=a : 这也是正确的。在这种情况下, p  被设置为指向数组  a  的开始处。这是因为在C/C++中,数组名(在这种情况下为  a )可以作为一个指针,指向数组的开始处。

需要注意的是,所有这些操作都假定  p  已经被声明为一个正确的类型,如  int *p;  对于一个整型数组  a 。这些操作也要求  p  不是一个常量指针,因为常量指针不能被重新指定。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-8 15:22:25 | 显示全部楼层
*p=&a[0],&a[0]是a[0]的地址,接收它的就是一个指针,所以*p是一个指针,p是一个指针的指针
p=&a[0],p是一个指针
*p=a[0],a[0]是一个数据,p是一个指针
p=a,a是数组名,是一个地址,代表整个数组,p就是一个指向数组的指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-8 15:51:20 | 显示全部楼层
结合你这道题目
设有int a[ ]={10,11,12},*p=&a[0];则执行完*p++;*p+=1;后a[0],a[1],a[2]的值依次是 (   )
*p=&a[0]这一句实际上是声明+赋值  int *p=&a[0], p是一个int型的指针
*p=&a[0]如果这是一条单独的赋值语句,p在前面的声明应该是 int **p;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 01:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表