//计算两个复数相乘的结果,就想问一下,使用结构变量的指针进行传参数的,传过去和原来的用法一样吧,这个还好不是结构体作为数组元素,数组元素的话几个都是共用一个首地址的吧,只用定义一个就行了.如果先定义了
struct student{
int age;
...
};
struct student *p;
这个只是声明了他是一个指向结构体变量的指针吧
struct student stu[10];
定义了一个长度为十个的结构数组,
再p = stu;才是真正的让结构体指针有了指向。
遍历是这样吗
(*p++).age 或者 (*p+1).age 相当于朝数组后面进了一位。相当于stu[2].age
还可以用p[2].age
应该可以用的,因为就把它当作数组来看,p[2]相当于 stu[2]
但是下面的好像不能这样,因为是一个的地址,肯定不能用p[2] p[i]什么的了
只能用(*p).age p->age 什么的,也就这两个了,只有数组是比较特殊,p是地址没错。。。。。但p[i]是个什么东西?
想起数组,是定义a[10]; int *p; p=a;等于数组名,数组名就是首地址。但是没见过p[i],没有说 p[2]代表就是a[2]的啊
说p[2]代表 a[2]的地址都好点。难道有这样的定义,不可能。
所以也就没有,struct student *p;
struct student group1[10];(小组一里面都是学生,有十个学生,定义一个结构体变量数组)
p = group1;
p[3].age =18; //第四个人的年龄为18,这样就不对了,因为p[3]是个什么东西
传参数就传过来结构体变量的地址,作为指针。
其实还挺方便的连指针都没定义,就直接&a, 把地址传过去。
但是传地址有危险,运行个函数把外面的原来的值改了。下面的a,b就有这样的风险?虽然代码挺安全的,所以有时候传结构进去,计算结果返回来挺好的。
#include <stdio.h>
typedef struct
{
double rp, ip;
} COMPLEX;
void Input(COMPLEX *p);
void Output(const COMPLEX *p);
COMPLEX Multiply(COMPLEX *p, COMPLEX *q);
int main()
{
COMPLEX a, b, c;
Input(&a);
Input(&b);
c =
Multiply(COMPLEX &a;COMPLEX &b)
;
Output(&c);
return 0;
}
void Input(COMPLEX *p)
{
scanf("%lg %lg",
&(*p).rp,&(*p).ip
);
}
void Output(const COMPLEX *p)
{
printf("%g %g",
(*p).rp,(*p).ip
);
}
COMPLEX Multiply(COMPLEX *p, COMPLEX *q)
{
COMPLEX r;
r.rp =
(p->rp)*(q->rp)+(p->ip)*(q->ip)
;
r.ip =
(p->rp)*(q->ip)+(p->ip)*(q->rp)
;
return r;
c语言结构体,结构体变量,结构体变量数组
最新推荐文章于 2024-07-11 10:11:17 发布