C语言中全局结构体赋值问题

全局结构体赋值

下面的程序报错:

#include <stdio.h>

struct node{
	char c;
	int a;
}n;

n.c='m';
n.a=4;

int main(){
	printf("%c %d\n",n.c,n.a);
}

错误信息:

[Error] expected '=', ',', ';', 'asm' or '__attribute__' before '.' token

指示的代码段是n.c='m';,说明不能在函数外给全局结构体的成员赋值。上网查阅相关的信息,找到的解释是:

n.c='m'是赋值语句,不是初始化语句,因此只能在函数中使用。

但是当我对基本数据类型做类似操作,如下面程序所示,却不会出错:

#include <stdio.h>

int a;

a=2;

int main(){
	printf("%d\n",a);
}

难道a=2;不是赋值语句吗?结构体和基本数据类型的区别在哪里?