C语言:结构体

1.结构体的操作

1.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);

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

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

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

1.3结构体指针
struct Point3D p = {1,2,3};
struct Point3D* q = &p;
  • 结构体指针访问成员
    结构体指针访问成员的方式与结构体变量访问成员的方式有区别。
    结构体变量使用.和名字访问成员。
    结构体指针使用->和名字访问成员。
    格式
结构体指针->成员名

例如:

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

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

  • 结构体指针作为参数
    在C语言中,通常会将结构体指针作为参数传入函数,尤其是当传递的参数类型比地址大的时候,可以使用这种方式既能传递较少的字节数。
void Print(struct Point3D* p){
    printf("(%d,%d,%d)",p->x,p->y,p->z);
}
1.4结构数组
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);
}
1.5结构体嵌套
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}}};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值