首页 > 解决方案 > 整数和数组之间的奇怪转换

问题描述

我已将全局变量定义SEIS_FORMAT为整数。但是我在外部函数中使用的时候,我把它定义为一个数组SEIS_FORMAT[6],用 as 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是等价的吗?

标签: carraysextern

解决方案


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

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


推荐阅读