C语言——数组的首元素地址和数组地址

本文解释了C语言中数组的首元素地址、常量指针和指针常量的区别,以及数组地址的表示方法。重点强调了数组首元素地址的两种表示方式和数组地址的递增含义。
摘要由CSDN通过智能技术生成

数组的首元素地址数组地址在数值上是相同的,但是它们所表示的意义却不相同:

1、数组的首元素地址:

       数组名 表示数组的首元素地址,该值是一个指针常量,不能被修改。

引申:常量指针和指针常量的区别

        1)常量指针:指向常量的指针。该指针指向一个常量,常量的值不可变,不可以通过该指针修改其值,但是该指针可以指向其他常量。(指针地址可以变,值不可以变)

int a = 10, b = 12;

const int *p = &a; //定义常量指针,指向int a的地址

*p = 20; // 错误,指向的内存地址中的数据不可以修改
p = &b; //正确,指向的内存地址可以修改

        2) 指针常量:指针本身是常量。该指针只能指向某个常量,不可再指向其他常量。(指针地址不可变,值可以变)

int a = 10;
int b = 12;

int* const p = &a; // 定义指针常量,指向int a的地址

*p = 100; // 正确,指向的内存地址中数据可以修改

p = &b; // 错误,指向的内存地址不可以修改

2、数组地址:

        &数组名 表示在整个数组的地址。

代码部分:

#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]); // 表示数组的首元素地址
    printf("&arr = %p\n", &arr); // 表示整个数组的地址

    printf("arr + 1 = %p\n", arr + 1); // 表示数组的的首元素+1
    printf("&arr[0] + 1= %p\n", &arr[0] + 1); // 表示数组的首元素地址+1
    printf("&arr + 1= %p\n", &arr + 1); //数组的首地址+1
    printf("arr + 9 = %p\n", arr + 10);

    return 0;
}

运行结果:

40
8
8
arr = 000000000061FDF0
&arr[0] = 000000000061FDF0
&arr = 000000000061FDF0
arr + 1 = 000000000061FDF4
&arr[0] + 1= 000000000061FDF4
&arr + 1= 000000000061FE18
arr + 9 = 000000000061FE18

 3、总结

* 数组首元素地址可使用:数组名字&数组名[0],两种方式表示,其+1表示指向数组的第二元素的地址。

* 数组地址使用:&数组名,其+1表示跳过整个数组的地址。

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值