专栏首页Android小知识NDK启航篇——C语言基础(结构体)

NDK启航篇——C语言基础(结构体)

今天来写一下结构体

什么是结构体?

  • 结构体是一种构造数据类型把不同的数据类型整合起来成为一个自定义的数据类型
  • 与Java中的类相似
  • 是C中最复杂的数据类型

结构体的初始化方式

  • ①声明的同时进行赋值
  • ②先声明,声明之后赋值
//尖括号代表系统类库,std表示标准,io表示输入输出 引入标准输入输出
#include<stdio.h>
//lib表示类库 引入标准类库
#include<stdlib.h>

struct Man{
  char* name;
  int age;
  int (*func)();
};
void main(){
  //初始化结构体的变量
//①声明的同时进行赋值
  struct Man m = {"TOM",21};
//②先声明
  struct Man m1 ;
//声明之后赋值
  m1.age = 20;
  m1.name = "JERRY";
  printf("%s,%d\n",m1.name,m1.age);
  getchar();
}

结构体的写法

  • struct 名字 { ··· };
  • struct 名字 { ··· }m1,m2("TOM",10);//结构体变量名
  • struct 名字 { ··· }名字; //取别名 typedef int Age;
  • 匿名结构体作用:控制结构体变量的个数,相当于单例
 struct{
  char name[10];
  int age;
}m1,m2;
  • 结构体嵌套
struct Teacher{
  char name [10];
};
struct Student{
  char name [20];
  int age;
  struct Teacher t;
};
void main(){
  struct Student s = {"TOM",10,{"JERRY"}};
  struct Student s1;
  s1.age = 10;
  strcpy(s1.t.name,"JERRY");
  getchar();
};

什么是结构体指针

  • 结构体指针就是指向结构体地址的指针
struct Man {
  char name[20];
  int age;
};
void main (){
 struct Man m1 = {"TOM",10};
 struct Man *p = &m1;
 printf("%s,%d\n",m1.name ,m1.age);
 printf("%s,%d\n",(*p).name ,(*p).age);
//"->"是"(*p)."的简写
 printf("%s,%d\n",p -> name ,p -> age);
 getchar();
};

什么是结构体指针数组

  • 结构体指针就是指向结构体地址的指针
struct Man {
  char name[20];
  int age;
};
void main (){
 struct Man mans[] = {("TOM",10),("TOM",10)};
  //遍历数组①
  struct Man *p = mans;
  for(;p<names +2;p++){
   printf("%s,%d\n",p -> name ,p -> age);
}
②
 int i = 0;
 for(;i<2;i++){
  printf("%s%d\n",mans[i].name,mans[i].age);
}
 struct Man *p = &m1;
 printf("%s,%d\n",m1.name ,m1.age);
 printf("%s,%d\n",(*p).name ,(*p).age);
//"->"是"(*p)."的简写
 printf("%s,%d\n",p -> name ,p -> age);
 getchar();
};

结构体大小(字节对齐)

  • 结构体变量的大小按最大的分配必须是最宽基本数据类型的整数倍
  • 提升读取效率
struct Man{
  int age;
  double weight;
};
void main(){
  struct Man m1 = {10,20.1};
  printf("%d,%#x\n",sizeof(m1),&m1);
  getchar();
}

结构体的知识点有点多但其实并不难,今天就先写到这里明天进续写结构体剩下的东西,欲速则不达,慢慢来不着急。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • NDK启航篇——C语言基础(结构体补充)

    longzeqiu
  • NDK启航篇——C语言基础

    longzeqiu
  • NDK启航篇——C语言基础(联合体)

    longzeqiu
  • NDK启航篇——C语言基础(指针)

    如上代码运行你会发现取出来的值为0.00000,原因就是指针的类型不匹配(通过4字节读取8字节的内容)

    longzeqiu
  • NDK启航篇——C语言基础(字符串)

    longzeqiu
  • NDK启航篇——C语言基础(内存分配)

    longzeqiu
  • NDK启航篇——C语言基础(函数指针)

    这里是彩蛋哦,肯定有人会问这就结束了,指针函数呢? ?,指针函数和函数指针并没有什么关系,非常简单,就是函数的返回值是指针而已,前面已经讲过指针是什么了所以就不...

    longzeqiu
  • NDK启航篇——C语言终章(文件IO操作)

    longzeqiu
  • 【C语言基础】结构体赋值

    结构体在 C 程序中使用的较为频繁,能对数据有一定的封装的作用。对一个结构体赋值时,经常采用的方式是,分别对其成员变量赋值。那么能否将一个结构体用赋值号(“=”...

    程序员互动联盟
  • [044]C语言基础-结构体对齐

    为什么A和B的sizeof值不一样,明明都是两个char和一个double,不应该是1+1+8 = 10嘛?

    王小二
  • 【干货】c语言基础语法——结构体

    这些数据类型都不同但是他们又是表示一个整体,要存在联系,那么我们就需要一个新的数据类型。

    老九君
  • Go语言基础之结构体(春日篇)

    之前我们讲过,Go语言的map是键值对的方式存储数据的,就像这样的。不记得的小伙伴请戳:一篇文章带你了解Go语言基础之map、Go语言基础之map补充。

    Go进阶者
  • Go语言基础之结构体(夏日篇)

    构造函数,跟其他语言一样了,官方理解就是在类实例化时执行的方法,通常用于赋值操作。

    Go进阶者
  • Go语言基础之结构体(秋日篇)

    Hey,大家好呀,码农我是星期八,咱们接着上次继续说,看一下结构体还有什么其他操作。没来得及上车的小伙伴请戳:Go语言基础之结构体(春日篇)、Go语言基础之结构...

    Go进阶者
  • Go语言基础之结构体(冬日篇)

    Hey,大家好呀,我是码农,星期八,这是最后一次了,同样也是Go面向对象的最后一次了。坚持住,一起看看看吧。

    Go进阶者
  • 【基础篇】Go 语言结构

    Go Hello World 实例 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 & 表达式 注释 接下来让我们来看下简单的代码,该代...

    李海彬
  • 手把手教你c语言基础语法——结构体

    在前面已经介绍了整形(int,long,….),浮点型(flaot,double),字符型(char),还介绍了数组(存储一组具有相同类型的数据),字符串。但是...

    诸葛青云
  • C语言基础-循环结构

    用户1941540
  • Android Studio 4.0 稳定版发布了

    Android Studio 4.0(2020年5月) 更新啦,此版本包含了各种新功能和改进,还有一些废弃配置。

    GSYTech

扫码关注云+社区

领取腾讯云代金券