# include<stdio.h>
int main()
{
struct Student
{
int num;
char name[10];
float grade;
}st1={12,"dfd",89};
struct Student *p;
p=&st1;
printf("%6d%7s%7.2f",p->num,(*p).name,st1.grade);
struct Student *q;
q=p; //为什么写成*q=*p就不行,指针变量指向之后不是等价吗?*p不是跟i等价吗?我赋值怎么了?
printf("\n%6d%7s%7.2f",q->num,(*q).name,(*q).grade);
return 0;
}
*p是指针本身的地址,你给*p赋值,就是把p这个指针指向了另一个实体
玩过红警和星际吗,魔兽呢,帝国时代呢,玩过任何即时战略游戏吗
玩即时战略的时候你可以给士兵编队,ctrl+数字表示编队,再按数字就可以快速找到你编队过的队伍,这个数字就相当于指针,ctrl就相当于星
你再按ctrl,那就是让另一个队伍占据原来的数字
struct Student是复杂类型,不能直接赋值,你的*p = *q相当于两个struct直接赋值,c语言是不支持的,
只能
(*p).num = (*q).num
当p和q都是指向基本数据类型(如int、float)时
如
int a = 0;
int b = 0;
int *p = &a;
int *q = &b;
*p = *q;
则可以这样操作
因为你没有给 q 空间,它只是一个野指针 或者为 NULL。 没有空间装载你的 *p 数据。
struct Student qq;
struct Student *q = &qq;
*q = *p;
或
struct Student *q = (struct Student *)malloc(sizeof(struct Student));
*q = *p;