我已将全局变量SEIS_FORMAT
定义为整数。但是,当我在外部函数中使用它时,我将其定义为数组SEIS_FORMAT[6]
并将其用作SEIS_FORMAT[0]
,如下所示:
1.MAIN()代码:
#include "head.h"
int SEIS_FORMAT=5; /*global variable*/
int main()
{
int a=2;
float b=3.5;
f1(&a, &b);
return 0;
}
2。功能代码:“ f1.c”
#include "head.h"
void f1(int *a, float *b)
{
extern int SEIS_FORMAT[6]; //different from the main()
printf("a=%d,b=%f,c=%d\n",*a,*b,SEIS_FORMAT[0]); //notice the use of SEIS_FORMAT
}
为什么我总是能得到正确的答案:a=2,b=3.500000,c=5
?
SEIS_FORMAT
的定义彼此等效吗?
答案 0 :(得分:0)
几乎可以肯定这是未定义的行为,因此一切皆有可能。
关于它为什么起作用的原因,链接器对数据类型一无所知,只知道名称SEIS_FORMAT
指的是特定的内存位置。它由主程序初始化为单个整数,但是f1()
然后将该内存位置视为数组的开头。数组的元素0
对应于在主程序中初始化的整数。