C专家编程 第9章 再论数组 9.5 数组和指针可交换性的总结

    数组和指针可交换性的总结
    1.用a[i]这样的形式对数组进行访问总是被编译器“改写”或解释为像*(a + 1)这样的指针访问。
    2.指针始终就是指针。它绝不可以改写成数组。当指针作为函数参数时,你可以用下标形式访问
指针,而且你知道实际传递给函数的是一个数组。
    3.在特定的上下文中,也就是它作为函数的参数时(也只有这种情况),一个数组的声明可以看
作是一个指针。作为函数参数的数组(就是在一个函数调用中)始终会被编译器修改成为指向数组第一个元素的指针。
    4.因此,当把一个数组定义为函数的参数时,既可以选择把它定义为数组,也可以定义为指针。不管选择那种方法,在函数内部事实上获得的都是一个指针。
    5.在其他所有情况中,定义和声明必须匹配。如果定义了一个数组,在其他文件对它进行声明时也必须把它声明为数组,指针也是如此。

    /*
    ** array_summary.
    */
    #include <stdio.h>
    #include <stdlib.h>
    
    void print_array( int arr[], int number );
    void print_array_2( int *pa, int number );
    
    int main( void ){
        int arr[] = {1, 2, 3};
        int *p;
        int size;
    
        size = sizeof(arr) / sizeof(*arr);
        p = arr;
        printf( "arr[0] = %d, *(arr + 0) = %d\n", arr[0], *(arr + 0) );
        printf( "arr = %p, p = %p\n", arr, p );
        printf( "sizeof(arr) = %zd, sizeof(arr) / sizeof(*arr) = %zd\n", sizeof(arr), size );
        print_array( arr, size );
        print_array_2( p, size );
        
        return EXIT_SUCCESS;
    }
    
    void print_array( int arr[], int number ){
        int i;
    
        printf( "sizeof(arr) = %zd\n", sizeof(arr) );
        for( i = 0; i < number; ++i ){
            printf( "%d ", arr[i] );
        }
        printf( "\n" );
    }
    void print_array_2( int *pa, int number ){
        int i;
        
        printf( "sizeof(pa) = %zd\n", sizeof(pa) );
        for( i = 0; i < number; ++i ){
            printf( "%d ", pa[i] );
        }
        printf( "\n" );
    }
输出:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_40186813

你的能量无可限量。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值