【C语言】&数组名 和 数组名

举报
謓泽 发表于 2023/09/30 15:40:27 2023/09/30
【摘要】 【C语言】&数组名 和 数组名

​💥 &数组名 和 数组名

&数组名取地址是取出它数组的地址。

数组名 数组名仅仅是表示它首元素的地址。

如下代码所示 👇

int arr[10] = {0};
int* p1 = arr;
int (*p2)[10] = &arr;

在上述代码所示👆

p1 只需要是 指针数组 就可以了

p2  它却需要的是 数组指针 就可以了

虽然,它们最后打印出来的值是一模一样的,但是他们的类型终究是不一样的。

如下代码所示 👇

#icnlude<stdio.h>
int main(void)
{
    int arr[10] = {0};
    int* p1 = arr;
    int (*p2)[10] = &arr;
    printf("p1   = %p\n",p1);
    printf("p1+1 = %p\n",p1+1);
    printf("%p2  = %p\n",p2);
    printf("%p2+1= %p\n",p2+1);
    
    return 0;
}

指针类型决定指针+1到底多少

p1 是一个整形指针+1,它会跳过个字节。

p2 是一个数组指针,p2指向的是一个数组。于是,p2+1就应该是跳过一个数组,指向对象的数组。

运行结果如下所示 👇 

第一行的编译结果与第二行的编译结果相差了个字节,个整形类型。

第三行的编译结果与第四行的编译结果相差了40个字节,个整形类型。

💥重点核心以后取地址数组名的话,一定要是数组指针!

注意⇢数组指针的第二个下标不能被省略,如果省略了第二个下标的话。那么指针类型就不明确了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。