C专家编程 第4章 令人震惊的事实:数组和指针并不相同 4.4 使声明与定义相匹配

发布于:2022-12-23 ⋅ 阅读:(135) ⋅ 点赞:(0)

    使声明与定义相匹配
    //文件1:
    int mango[100];
    //文件2:
    extern int mango[];
    mango数组的定义分配了100个int的空间。
    ...
    引用mango[i]的一些代码
    int *raisin; 
    申请一个地址容纳该指针。指针的名字是raisin,它可以指向任何一个int变量(或int数组)。指针变量raisin本身始终位于同一个地址,但他的内容在任何时候都可以不相同,指向不同地址的int变量,mango数组的地址并不能改变,在不同的时候他的内容可以不同,但它总是表示100个连续的内存空间。

    /*
    **file_header.h
    */
    #ifndef FILE_HEADER_H
    #define FILE_HEADER_H

    void print_array_size( void );

    #endif

    /*
    ** file.c.
    */
    #include <stdio.h>
    #include <stdlib.h>
    #include "file_header.h"

    int mango[100];

    void print_array_size( void ){
        printf( "sizeof(mango) = %zd, mango = %p\n", sizeof(mango), mango );    
    }

    /*
    **file2.c.
    */
    #include <stdio.h>
    #include <stdlib.h>
    #include "file_header.h"

    extern int mango[];

    int main( void ){
        int *raisin = NULL;
        printf( "1:&raisin = %p, raisin = %p\n", &raisin, raisin );
    
        int i = 1, j = 2;
        raisin = &i;
        printf( "2:&raisin = %p, raisin = %p\n", &raisin, raisin );
    
        raisin = &j;
        printf( "3:&raisin = %p, raisin = %p\n", &raisin, raisin );
    
        printf( "mango = %p\n", mango );
        /*
        ** mango = &j;
        ** can't pass compilation:
        ** error: invalid use of array with unspecified bounds
        */
    
        print_array_size();
    
        return EXIT_SUCCESS;
    }
输出:

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到