C语言06--数组进阶

数组名含义

  • 数组名有两个含义:
    • 第一含义是:整个数组
    • 第二含义是:首元素的地址
  • 当出现以下情形时,那么数组名就代表整个数组:
    • 在数组定义中
    • 在 sizeof 运算表达式中 ,因此sizeof 计算的就是整个数组的大小。sizeof(arr)
      • sizeof(arr)为数组元素类型大小和数组元素个数的乘积
    • 在取址符&中 , 因此取得的地址是整个数组的地址。
  • 其他任何情形下,那么数组名就代表首元素的地址。即:此时数组名就是一个指向首元素的指针。
  • 示例:
int a[3];                  // 此处,a 代表整个数组
printf("%d\n", sizeof(a)); // 此处,a 代表整个数组
printf("%p\n", &a);        // 此处,a 代表整个数组,此处为整个数组的地址

int *p = a;       // 此处,a 代表首元素 a[0] 的地址,等价于 &a[0]
p = a + 1;        // 此处,a 代表首元素 a[0] 的地址,等价于 &a[0]
function(a);      // 此处,a 代表首元素 a[0] 的地址,等价于 &a[0]
scanf("%d",  a ); // 此处,a 代表首元素 a[0] 的地址,等价于 &a[0]

C语言只有在第一含义的场合下表现为数组,其他大部分场合都表现为首元素的地址,当数组表现为首元素地址时,实际上就是一个指向其首元素的指针。数组运算实际上就是指针运算。

#include <stdio.h>
 
int main()
{
    int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    printf("%d\n", sizeof(arr)); // 数组的整个大小 10 * 4 = 40
    printf("%d\n", sizeof(&arr[0])); // 数组首元素的地址,一般看pc的位数,32位的为4,64位的为8

    printf("%d\n", sizeof(&arr)); // &arr表示数组的地址,一般看pc的位数,32位的为4,64位的为8
    printf("arr = %p\n", arr); // 表示数组的首元素地址
    printf("&arr[0] = %p\n", &arr[0]); // 表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值