结构体(上)

结构是一些指的集合,这些值称为成员变量,结构的每个成员可以是不同的成员变量

数组 是一组相同类型的集合

我们生活中有很多复杂对象

像人的话身高对象,书的话作者出版社书号

复杂对象就会用到结构体

struct是结构的关键字,tag是结构体的标签

这样就是我们人的类型

姓名电话性别身高

里面括号就叫成员变量

这个类型已经创建好了,这时候创建两个变量人

1个是P1,一个是P2

上面和下面的区别,下面就是用创建好的结构体类型创建了两个变量

P1,P2是全局变量

我们可以不这样做

可以像下面这样

如果在main函数里面,那么我们就只能在内部使用,是有范围的

左边是类型(结构体类型) 右边是我们用类型创建的变量

P1是结构体创建的变量

左边的相当于盖房子前要用到的图纸

右边是我们的房子,图纸创建了,才能盖我们的·房子

左边是图纸(结构体类型),是不占用任何空间的

当我们盖房子(创建变量时)才会真正的占用空间

结构成员的类型

结构的成员可以是标量(int float char ),数组,指针,甚至可以是其他的结构体

结构体中也是可以放其它结构体的

当然下面的结构体是依赖上面的结构体的,如果没有上面的结构体是不能过的

上面的先有,下面的才能有

P3,P4P5,P6都是全局变量

当然也可以在主函数里面创建

下面那个创建的就是初始化

#include"stdio.h"
#include"string.h"

struct ren
{
    char xingming[15];
    char dianhua[20];
    char sez[5];
    int high;
};
int main()
{
      struct ren aa={"阿森松岛","123213","男",181};
    return 0;
}

结构体中再放一个结构体初始化

#include"stdio.h"
#include"string.h"

struct ren
{
    char xingming[15];
    char dianhua[20];
    char sez[5];
    int high;
};
struct ww
{
struct ren p;
int hum;
float www;
};
int main()
{
      struct ren aa={"阿森松岛","123213","男",181};
      struct ww nit={{"你想","221321","男",123},123,123.12};//里面的结构体是我们第一个变量,把他初始化好了
      //(浮点数在内存中是不能精确保证的)
    return 0;
}

可以后面的不初始化,这种初始化叫不完全初始化

结构体的打印和结构体中的结构体打印

结构体的变量就要用点

这里我们拿到的是结构体的对象(变量)所以用点.如果是地址就要用到箭头了

3.14后面有f是为了说明这是一个float类型

不加f 是double,加了f 是float

#include"stdio.h"
#include"string.h"

struct ren
{
    char xingming[15];
    char dianhua[20];
    char sez[5];
    int high;
};
struct ww
{
struct ren p;
int hum;
float www;
};
int main()
{
      struct ren aa={"阿森松岛","123213","男",181};
      struct ww nit={{"你想","221321","男",123},123,123.12};//里面的结构体是我们第一个变量,把他初始化好了
      //(浮点数在内存中是不能精确保证的)
      printf("%s %s %s %d\n",aa.xingming,aa.dianhua,aa.sez,aa.high);//aa是对象所以要加点
      printf("%s %s %s %d %d %.2f\n",nit.p.xingming,nit.p.dianhua,nit.p.sez,nit.p.high,nit.hum,nit.www);
    return 0;
}

我们试一下箭头

我们传一个结构体的地址,用一个结构体的指针来接收

#include"stdio.h"
#include"string.h"

struct ren
{
    char xingming[15];
    char dianhua[20];
    char sez[5];
    int high;
};
struct ww
{
struct ren p;
int hum;
float www;
};
void print(struct ren *pp)
{
    printf("%s %s %s %d\n",pp->xingming,pp->dianhua,pp->sez,pp->high);
}
void print2(struct ren pp)
{
  printf("%s %s %s %d",pp.xingming,pp.dianhua,pp.sez,pp.high);
}
int main()
{
      struct ren aa={"阿森松岛","123213","男",181};
      struct ww nit={{"你想","221321","男",123},123,123.12};//里面的结构体是我们第一个变量,把他初始化好了
      //(浮点数在内存中是不能精确保证的)
   //   printf("%s %s %s %d\n",aa.xingming,aa.dianhua,aa.sez,aa.high);//aa是对象所以要加点
     // printf("%s %s %s %d %d %.2f\n",nit.p.xingming,nit.p.dianhua,nit.p.sez,nit.p.high,nit.hum,nit.www);
      print(&aa);
      print2(aa);
    return 0;
}

我们把结构体的地址传过去 pp是指向结构体的指针,箭头可以找到他的成员

printe2的我们的aa是实参传给了pp形参,形参pp是实参的一份内存拷贝

我们用到的结构体成员访问的操作符叫点操作符

左边是结构体变量用点可以找到他的结构体变量

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值