整数和数组之间的奇怪过渡

时间:2019-01-31 04:38:03

标签: c arrays extern

我已将全局变量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=5SEIS_FORMAT的定义彼此等效吗?

1 个答案:

答案 0 :(得分:0)

几乎可以肯定这是未定义的行为,因此一切皆有可能。

关于它为什么起作用的原因,链接器对数据类型一无所知,只知道名称SEIS_FORMAT指的是特定的内存位置。它由主程序初始化为单个整数,但是f1()然后将该内存位置视为数组的开头。数组的元素0对应于在主程序中初始化的整数。