E7ABA0名词的空间域、时间域和物理存储位置
a= 10
a= 20, x= 10
a= 10, b= 30
Press any key to continue
main()中的输出
fun()中的输出
main()中的层输出内层Person类型变量LiSi的大小,编译出错
sizeof(LiSi)= 20
sizeof(ZS)= 16
Press any key to continue
程序的所有代码都是写在文件中的。
用C/C++编写程序,最少要有一个文件。
在文件内定义的类型或量值(注意:不包含在任何模块中,而是直接定义在文件中)的空间域是从定义位置开始,到本文件的结束。本文件内,在定义该类型或量值后面的任何模块内或模块外,都可以引用该类型或量值。
类型只能定义在前,引用在后。
变量通常定义在前,引用在后。
变量如果定义在后,引用在先,必须在引用前明确用关键字extern声明。
例6. 4 文件中定义的类型或量值的空间域
#include<>
struct Person
{ int id;
char name[10];
};
int i;
定义在文件中的Person类型
定义在文件中的int型变量i
void main()
{
Person ZS={1,"张三"};
{
i=10;
printf("i= %d\n",i);
}
printf(“id=%d name=%s\n", , );
}
在main函数的外层模块中声明一个Person类型的变量ZS,并赋值
在main函数的内层模块中引用整型变量i,并赋值
i= 10
id=1 name=张三
Press any key to continue
一个编译出错的示例程序:
程序中,将Person类型的定义写在文件的后端,而文件前端的main函数模块内,引用了后面才定义的Person类型。程序编译出错。
#include<>
int i;
void main()
{ Person ZS={1,"张三"};
{
i=10;
printf("i= %d",i);
}
printf("%d %s\n", , );
}
struct Person
{ int id;
char name[10];
};
在main函数的外层模块中声明一个定义在文件后面的Person类型的变量ZS,并赋值。编译出错
定义在文件后面的Person类型
用extern声明定义在后的变量的情况。
例6. 6 变量的先声明,再应用,而后定义
#include<>
#include<>
struct Person
{ int id;
char name[10];
};
定义在文件前面的Person类型
void main()
{ extern int i;
i =10;
extern Person ZS;
=1;
strcpy(, "张三");
printf("i= %d\n", i);
printf(“id=%d name=%s\n", , );
}
Person ZS;
int i;
定义在文件后面的变量i,ZS
声明在文件后面定义的变量i
声明在文件后面定义的变量ZS
i= 10
id=1 name=张三
Press any key to continue
#include<>
#include<>
struct Person
{ int id;
char name[10];
};
void main()
{ Person ZS={1, "张三" };
int i=10;
printf("i= %d\n", i);
printf("%d %s\n", , );
extern int j;
j=200;
printf(“j=%d\n", j);
int j;
}
出错
原因:”定义在后,重新声明,然后引用”的规则模块外(文件内)的全局变量在模块内引用的规则,不能应用于模块内声明的局部变量。
注意: ”定义在后,重新声明,然后引用”的规则不适合类型,只适合变量。
工程中可以有多个文件
每个文件中可以有多个全局的类型、全局的量值和全局的函数模块
函数模块内可以有多个局部的类型和局部的量值
E7ABA0名词的空间域、时间域和物理存储位置 来自淘豆网www.taodocs.com转载请标明出处.