tttttt@@@@@@ 发表于 2023-6-8 15:10:15

这几种指针与数组的赋值怎么区分

*p=&a与p=&a与*p=a与p=a

isdkz 发表于 2023-6-8 15:14:13

在C/C++中,这四种表达式中的指针与数组的赋值操作具有不同的意义。我会一一为你解释:

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

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

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

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

需要注意的是,所有这些操作都假定p已经被声明为一个正确的类型,如int *p;对于一个整型数组a 。这些操作也要求p不是一个常量指针,因为常量指针不能被重新指定。

两手空空儿 发表于 2023-6-8 15:22:25

*p=&a,&a是a的地址,接收它的就是一个指针,所以*p是一个指针,p是一个指针的指针
p=&a,p是一个指针
*p=a,a是一个数据,p是一个指针
p=a,a是数组名,是一个地址,代表整个数组,p就是一个指向数组的指针

两手空空儿 发表于 2023-6-8 15:51:20

结合你这道题目
设有int a[ ]={10,11,12},*p=&a;则执行完*p++;*p+=1;后a,a,a的值依次是 (   )
*p=&a这一句实际上是声明+赋值int *p=&a, p是一个int型的指针
*p=&a如果这是一条单独的赋值语句,p在前面的声明应该是 int **p;
页: [1]
查看完整版本: 这几种指针与数组的赋值怎么区分