c语言定义全局数组问题?

2024-11-05 23:12:10
推荐回答(3个)
回答1:

在C语言中,全局变量和函数声明及定义并列,也就是说,声明在最外层作用域的变量即为全局变量

如在如下程序中
int i;

int main()
{
int i_copy = i;
i = 9;
return 0;
}
int i就是一个全局变量,故在main函数中可以调用或修改i的值
所以,定义数组也和普通全局变量的方法相同,如
char str[10];

int main()
{
str[0] = 'a';
str[1] = '\0';

return 0;
}

但是有几点需要注意:
C中自上向下语法分析和编译语法树,如果要让所有函数都能调用该全局变量,就要把其放在所有函数定义之前,确保声明的作用域覆盖整个程序;
在全局变量声明时,其初始值必须为编译时常量,不能为变量;
若要使用程序外的全局变量,需要在修饰符中加入extern关键字,并不要忘了和原本定义处链接

回答2:

单片机的LED控制?数组在子函数外作全局变量是可以的,我就经常这么定义。你的程序主函数呢?void main?问题不在子函数的数组调用这。全局数组的定义语句一般是uchar code table[] ={};和一般的数组定义不同,必须加code,你看是不是这个问题。详细你可以找我私戳

回答3:

/***************************************************************************
把你的所有函数体写在main函数前面,就不用在前面进行函数声明;
数组什么时候加code,这个是有讲究的,在程序运行中不对数组里的内容
进行修改时,这时可以加上code;如果在程序运行中要对数组里的内容进行
修改,那么就不能加上code;比如在你程序中就可以加上code.
****************************************************************************/
#define uint unsigned int
#define uchar unsigned char
uchar a[]={0xc0,0xcf,0xa4,0x86,0x8b,0x92,0x90,0xc3,0x80,0x82,0x7f,0xb3,0xff};
uchar A[]={0xc0,0xcf,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90,0x7f,0xb3,0xff};
uchar WEI[]={0x00,0x08,0x04,0x02,0x01};
uchar led1,led2,led3,led4;
uchar x=100;
void sz()
{
if(P04==0)
{
G();
}
else
{
R();
}
}
void G()
{
P14=1;
P2=A[led1];
P14=0;
P13=1;
P2=wei[1];
P13=0;
ys(x);
//-------------------------
P14=1;
P2=A[led2];
P14=0;
P13=1;
P2=wei[2];
P13=0;
ys(x);
//-------------------------
P14=1;
P2=a[led3];
P14=0;
P13=1;
P2=wei[3];
P13=0;
ys(x);
//-------------------------
P14=1;
P2=a[led4];
P14=0;
P13=1;
P2=wei[4];
P13=0;
ys(x);
}

void R()
{
P14=1;
P2=A[led1];
P14=0;
P13=1;
P2=WEI[1];
P13=0;
ys(x);
//****************************
P14=1;
P2=A[led2];
P14=0;
P13=1;
P2=WEI[2];
P13=0;
ys(x);
//****************************
P14=1;
P2=a[led3];
P14=0;
P13=1;
P2=WEI[3];
P13=0;
ys(x);
//****************************
P14=1;
P2=a[led4];
P14=0;
P13=1;
P2=WEI[4];
P13=0;
ys(x);
}
void main( void )
{

}