使声明与定义相匹配
//文件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;
}
输出: