<c语言学习>数组名是什么时候不代表数组首元素地址

在C语言中,数组名通常代表数组首元素的地址,但有以下两种情况例外:

1. 当使用`&`运算符获取数组名的地址时,得到的是整个数组的地址,而不是数组首元素的地址。例如:
 

   int arr[10];
   // &arr 是整个数组的地址,不同于arr(数组首元素的地址)
   printf("%p\n", &arr);

2. 使用`sizeof`运算符来计算数组所占空间大小时,数组名代表的是整个数组的大小(以字节为单位),而不是地址:
 

   sizeof(arr); // 这将返回整个数组arr所占用的总内存大小,而不是地址

在这两种情况下,数组名并不表示数组首元素的地址。在其他所有表达式中,数组名可以被看作是数组首元素的指针常量。

3.当对数组名取地址(例如 int arr[10]; 中的 &arr)后再进行加一操作时,结果增加的并非一个元素的大小,而是整个数组类型的大小。由于数组是一段连续内存空间,因此对于 int arr[10];(&arr) + 1 将使地址增加整个数组占用的内存大小,即10个 int 类型变量所占的总字节数(通常为40字节)。

所以,&arr+1 和普通整型变量地址加一在行为上确实是有显著区别的。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值