使用VC6打开考生文件夹下的源程序文件modi1.cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为:
150
200
注意:错误的语句在//******error******的下面,修改该语句即可。提示:定义Number1为一个整型数据位长的变量。
1 #include< iostream.h >
2 //******error******
3 struct
4 {
5 //******error******
6 int Number1:1;
7 int Number2;
8 } MyStruct;
9 void main()
10 {
11 MyStruct mstr;
12 mstr.Number1=150;
13 mstr.Number2=15;
14 //******error******
15 int *ptr=&mstr.Number1;
16 cout< < *ptr< < end1;
17 *ptr=200;
18 cout< < *ptr< < end1;
19 }
【正确答案】(1)typedef struct
(2)int Number1:32;或int Number1;
(3)int*ptr=(int*)& mstr;
【答案解析】结构体MyStruct有两个成员变量Number1和Number2,主函数中定义结构变量mstr,并通过指针改变变量mstr内Number1的值。
(1)第1标识下是定义结构体,结构体定义的一般形式为:
struct< 结构体名 >
{
< 成员列表 >
}< 变量名列表 >:
程序当中定义结构体名放在后面,MyStruct为结构体变量类型,相当于typedef为已有的类型定义一个新的类型,第1个标识下应改为“typedefstruct”。
(2)第2标识下是定义Number1为一个整型数据变量,整型数据位数为32(4字节),因此第2个标识下应改成“int Number1:32;”或“int Number1:”。
(3)ptr为整型数据指针,mstr为MyStruct类型结构变量,两者类型不一致应该做强制类型转换,第3个标识下应改成“int*ptr=(int*)&mstr;”,表示将mstr的地址给ptr,ptr指向MyStruct的第一个域Number1,Number1也是整形,类型一致,故可通过ptr指针来改变Number1的值。