注册 登录
编程论坛 C语言论坛

想问一下大佬们数组是都可以省去取地址符吗,为什么?

zzz145 发布于 2021-12-21 10:32, 1698 次点击
如题
6 回复
#2
rjsp2021-12-21 11:14
你这个问题莫名其妙的,你得告诉别人你脑子里想象的使用场合

int a[3];
a 是 int[3] 类型,是一个数组(当然它也能隐式退化成一个指向int类型的指针,比如 int* p = a;);
&a 的类型是 int(*)[3],也就是它是一个指向int[3]类型的指针。

两者类型不一致,鬼知道你脑子里想象的那个场合是否适用
比如
void* p = a;
void* p = &a;
这两者就是完全等价的,C标准规定了数组地址与数组首元素地址相同(但类型不同)
#3
diycai2021-12-21 11:16
程序代码:
#include <stdio.h>
int main()
{
    int buf[10];
    int a[5] = {1,2,3,4,5};
    a[5] = 88;
    printf("%d %d\n" , *(a+1), *(int *)(&a+1));
    return 0;
}
#4
qq3832646792021-12-21 15:44
好久没来论坛了,看一下相关的过往经历,这个论坛从注册到现在差不多9年了!
#5
qq3832646792021-12-21 15:44
回复 2楼 rjsp
c语言大神!
#6
zzz1452021-12-21 19:08
回复 2楼 rjsp
就是scanf数组的话,一维数组、二维数组什么的都不用加取地址符吗?
#7
zzz1452021-12-21 19:13
回复 3楼 diycai
求问:为啥*(int *)(&a+1)的输出结果是a[5]的值啊
1