c语言结构体,结构体变量,结构体变量数组

//计算两个复数相乘的结果,就想问一下,使用结构变量的指针进行传参数的,传过去和原来的用法一样吧,这个还好不是结构体作为数组元素,数组元素的话几个都是共用一个首地址的吧,只用定义一个就行了.如果先定义了
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;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值