typedef struct stu
{
char name[10],gender;
int score;
}STU;
void f(char *p)
{
strcpy(p,"Qian");
}
main()
{
STU a={"zhao",'m',290},b;b=a;
f(b.name);
b.gender='f';
b.score=350;
printf("%s,%c,%d,",a.name,a.gender,a.score);
printf("%s,%c,%d,",b.name,b.gender,b.score);
}
/*
1.程序运行结果为:
zhao,m,290,Qian,f,350,
=======b=a;---b指向结构体变量a的地址了,然后给b变量成员赋值,为何最终结果没有修改a成员的值呢?
*/
小伙子,你指针没学好啊,跟我大学时候一样,对指针没概念。
STU a={"zhao",'m',290},b;b=a;这样的定义是拷贝;虽然你没有定义拷贝构造函数,但是都是基本类型,所以copy是成功的。
STU a={"zhao",'m',290},*b;b=&a;这样叫指针。
b并不是STU指针类型,只是STU类型的局部变量。
可以修改定义:
STU a={"zhao",'m',290};
STU *b=&a;
然后再试试后面的代码,但需要修改一些代码编译才能通过。
a,b是结构体变量,并不是指针变量,b=a是复制结构体,不是指针的赋值。
#include
using namespace std;
typedef struct stu
{
char name[10],gender;
int score;
}STU;
void f(char* p)
{
strcpy(p,"Qian");
}
void main()
{
STU a={"zhao",'m',290};//,b;b=a;
STU *b=&a;
f(b->name);
b->gender='f';
b->score=350;
printf("%s,%c,%d,",a.name,a.gender,a.score);
printf("%s,%c,%d,",b->name,b->gender,b->score);
system("pause");
}
//a的成员变量被修改成b了
//如果你的成员变量中有指针的话,你这程序是不行的,因为你想把a赋值给b就得重写拷贝构造函数!