结构体变量与结构体成员能同名吗?
我在做卷子的时候发现这个选择题,好心人解答:1.若有如下说明,且int类型占两个字节,则正确的叙述为()structst{inta;intb[2];}a;A)结构体变量a...
我在做卷子的时候发现这个选择题,好心人解答:
1.若有如下说明,且int类型占两个字节,则正确的叙述为()
struct st
{
int a;
int b[2];
}a;
A)结构体变量a与结构体成员a同名,定义是非法的
B)程序只在执行到该结构体时才为结构体st分配存储单元
C)程序运行时为结构体st分配8字节存储单元
D)类型名struct st可以通过extern关键字提前引用
这题答案(A)
这套卷子有过几个错误,但是我不知道这个题对不对,我调试过,A是合法的。 我选的B,各位怎么看呢? 展开
1.若有如下说明,且int类型占两个字节,则正确的叙述为()
struct st
{
int a;
int b[2];
}a;
A)结构体变量a与结构体成员a同名,定义是非法的
B)程序只在执行到该结构体时才为结构体st分配存储单元
C)程序运行时为结构体st分配8字节存储单元
D)类型名struct st可以通过extern关键字提前引用
这题答案(A)
这套卷子有过几个错误,但是我不知道这个题对不对,我调试过,A是合法的。 我选的B,各位怎么看呢? 展开
3个回答
展开全部
结构体,在C++中,是一个类而已。所以,不管是类,还是结构体,它产生的对象名,其实是可以与成员同名的。
所以A是错的。而B和C,因为编译器根本不会为结构体分配内存,而只是为结构体变量分配内存。
例如:
struct Student
{
int num;
int age;
char sex;
}
void main()
{
cout<<sizeof(Student)<<endl;//可以测得Student的大小
//cout<<&Student<<endl; //这句非法,因为不能对结构体进行取地址运算
Student s; //声明一个结构体变量s
cout<<&s<<endl;//对s取地址
}
而D选项,st根本不是外部的结构体。
所以这道题应该没有正确答案。
做题,其实没有实际意义,只有实际去编程才有意义。
所以A是错的。而B和C,因为编译器根本不会为结构体分配内存,而只是为结构体变量分配内存。
例如:
struct Student
{
int num;
int age;
char sex;
}
void main()
{
cout<<sizeof(Student)<<endl;//可以测得Student的大小
//cout<<&Student<<endl; //这句非法,因为不能对结构体进行取地址运算
Student s; //声明一个结构体变量s
cout<<&s<<endl;//对s取地址
}
而D选项,st根本不是外部的结构体。
所以这道题应该没有正确答案。
做题,其实没有实际意义,只有实际去编程才有意义。
2009-09-12
展开全部
我和你想法一样,这个写法应该是可以的
===========================================================
晓风残狼 朋友,你对B的解释不太明白,你用 &Student是错误的来证明struct不会分配内存,那难道说如果Student是一个类,就可以写这种语法吗?据我所知,c++中struct和class的区别仅在于默认的访问权限,那么在分配内存的说法上,应该是不会有差异的。请指教。
===========================================================
晓风残狼 朋友,你对B的解释不太明白,你用 &Student是错误的来证明struct不会分配内存,那难道说如果Student是一个类,就可以写这种语法吗?据我所知,c++中struct和class的区别仅在于默认的访问权限,那么在分配内存的说法上,应该是不会有差异的。请指教。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
结构体,在C++中,是一个类而已。所以,不管是类,还是结构体,它产生的对象名,其实是可以与成员同名的。
所以A是错的。而B和C,因为编译器根本不会为结构体分配内存,而只是为结构体变量分配内存。
例如:
struct
Student
{
int
num;
int
age;
char
sex;
}
void
main()
{
cout<<sizeof(Student)<<endl;//可以测得Student的大小
//cout<<&Student<<endl;
//这句非法,因为不能对结构体进行取地址运算
Student
s;
//声明一个结构体变量s
cout<<&s<<endl;//对s取地址
}
而D选项,st根本不是外部的结构体。
所以这道题应该没有正确答案。
做题,其实没有实际意义,只有实际去编程才有意义。
所以A是错的。而B和C,因为编译器根本不会为结构体分配内存,而只是为结构体变量分配内存。
例如:
struct
Student
{
int
num;
int
age;
char
sex;
}
void
main()
{
cout<<sizeof(Student)<<endl;//可以测得Student的大小
//cout<<&Student<<endl;
//这句非法,因为不能对结构体进行取地址运算
Student
s;
//声明一个结构体变量s
cout<<&s<<endl;//对s取地址
}
而D选项,st根本不是外部的结构体。
所以这道题应该没有正确答案。
做题,其实没有实际意义,只有实际去编程才有意义。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询