当前位置 博文首页 > 谁吃薄荷糖:【C语言“数组名”,不得不说的秘密!】c语言中“数

    谁吃薄荷糖:【C语言“数组名”,不得不说的秘密!】c语言中“数

    作者:[db:作者] 时间:2021-07-12 21:42

    ?代码:

    #include<stdio.h>
    int main()
    {
        int  a[10] = {0};
    
        printf("a:    %p     a + 1:     %p\n",a,a + 1);
        printf("&a:   %p     &a + 1:    %p\n",&a,&a + 1);
        printf("&a[0]:%p     &a[0] + 1: %p\n",&a[0],&a[0] + 1);
    
        return 0;      
    }

    结果:

    a:    0x7ffc2190a8b0     a + 1:     0x7ffc2190a8b4
    &a:   0x7ffc2190a8b0     &a + 1:    0x7ffc2190a8d8
    &a[0]:0x7ffc2190a8b0     &a[0] + 1: 0x7ffc2190a8b4

    结论:

    数组名a表示的是“数组首个元素的地址,而首个元素是int类型”,&a指的是int?a[10]这个数组的地址,而这个数组的长度是40个字节,所以&a + 1比a大了40。

    可以发现a?与 &a[0]是等价的:在很多用到数组名字的地方,编译器都会自动地将其替换为一个指向数组首元素的指针。

    扩展:

    1.本文以int数组为例,字符串数组等其他类型数组同样适用此特性;

    2.数组名称作为形参传进去函数时,退化成指针使用。

    cs