C语言初阶(七)结构体

一.结构体操作

1.取地址

struct Point3D{
    int x;
    int y;
    int z;  
};

struct Point3D p = {1,2,3};
printf("&p = %p\n",&p);
printf("&(p.x) = %p\n",&p.x);
printf("&(p.y) = %p\n",&p.y);
printf("&(p.z) = %p\n",&p.z);

结构体名不是结构体变量的地址,必须使用&获取地址
数组名即地址。

2.传参

void Print(struct Point3D p){
    printf("(%d,%d,%d)",p.x,p.y,p.z);
}

  整个结构体作为参数的值传入函数。这时候在函数内新建一个结构体变量并复制值。结构体可以作为返回值,也是结构体整体复制。

二.结构体指针

struct Point3D p = {1,2,3};
struct Point3D* q = &p;

 1.结构体指针访问成员

结构体变量使用.和名字访问成员。
结构体指针使用->和名字访问成员。 

struct Point3D p = {1,2,3};
struct Point3D* q = &p;
printf("(%d,%d,%d)",q->x,q->y,q->z); // 等同于printf("(%d,%d,%d)",(*q).x,(*q).y,(*q).z);

 通过修改结构体指针q指向的成员,也会改变结构体变量p成员的值。

2.结构体指针作为参数 

void Print(struct Point3D* p){
    printf("(%d,%d,%d)",p->x,p->y,p->z);// 等同于printf("(%d,%d,%d)",(*q).x,(*q).y,(*q).z);
}

 三.结构数组

struct Point3D ps[] = {{1,2,3},{1,1,1},{0,0,0}};
for(int i=0;i<3;++i){
    printf("(%d,%d,%d)\n",ps[i].x,ps[i].y,ps[i].z);
}

四.结构体嵌套

struct Line{
    struct Point3D start;
    struct Point3D end;
};
struct Line line = {{1,1,1},{0,0,0}};
// 使用
printf("(%d,%d,%d)~(%d,%d,%d)",
line.start.x,line.start.y,line.start.z,
line.end.x,line.end.y,line.end.z);

struct Line* p = &line;
printf("(%d,%d,%d)~(%d,%d,%d)",
p->start.x,p->start.y,p->start.z,
p->end.x,p->end.y,p->end.z);

结构体含有结构体数组: 

struct Triangle{
    struct Point3D p[3];
};

struct Triangle t = {{{1,2,3},{1,1,1},{0,0,0}}};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值