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

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

继续昨天的内容,把结构体剩下的一点内容写完。

结构体与动态内存分配

struct Man{
  char *name;
  int age;
}
void main(){
//malloc 返回值默认是void* 所以我们最好写成我们自己的类型
  struct Man *m_p = (struct Man*)malloc(sizeof(struct Man) * 10);
  struct Man *p = m_p;
  //赋值
  p->name = "Tom";
  p->age = 10;
  p++;
  p->name = "Jerry";
  p->age = 11;
  
  struct Man *loop_p = m_p;
  for(; loop_p <m_p +2;loop_p++){
    printf("%s,%d\n",loop_p->name,loop_p->age);
  }
  free(m_p);
  getchar();
}

typedef 类型取别名

  • 取别名便于使用
  • 不同的名称代表在做不同的事情
  • 不同情况下使用不同的别名
  • 书写简洁
struct Man{
  char name [20];
  int age;
};
//Age是int类型的别名
typedef int Age;
//Ap是int类型指针的别名
typedef int * Ap;
typedef struct Man JavaMan;
typedef struct Man * Jn;
//结构体取别名
typedef struct Woman{
  char name[20];
  int age;
}W,*WP;//W是woman结构体的别名WP是woman结构体指针的别名
void main (){
  int i =5;
  Ap p = &i;
  //结构体变量
  W w1 = {"Rose",20};
  //结构体指针
  WP wp1 = &w1;
  printf("%s,%d\n",w1.name,w1.age);
  printf("%s,%d\n",wp1->name,wp1->age);
  getchar();
}

结构体函数指针成员

struct Girl{
  char name[20];
  int age;
  //函数指针
  void (*sayHi)(char*);
};
//Girl 结构体类似与Java中的类,name和age类似于属性,sayHi类似于方法
  void sayHi(char*text){
    MessageBoxA(0,"Hi","title",0);
}
void main(){
  struct Girl g1;
  g1.name = "Lucy";
  g1.sayHi = sayHi;
  g1.sayHi("hello");
  getchar();
}
  • 和结构体同名的别名,省略写struct
typedef struct Girl{
  char name[20];
  int age;
  //函数指针
  void (*sayHi)(char*);
}Girl;
//Girl 结构体类似与Java中的类,name和age类似于属性,sayHi类似于方法
  void sayHi(char*text){
    MessageBoxA(0,"Hi","title",0);
  }
//Girl结构体指针取别名GirlP
typedef Girl* GirlP;
//改名
void rename(GirlP gp1){
  gp1 -> name = "Lily";
}
void main(){
  Girl g1 = {"Lucy",18,sayHi};
  GirlP gp1 = &g1;
  gp1->sayHi("Byebye!");
  //传递指针,改名
  rename(gp1);
  getchar();
}
  • 字符串数组赋值,只能在声明时赋值,但可以修改内容
char a[10] = "Happy";
//a = "Sad";不行
//可以修改内容
a[0]= "F";
//重新赋值
strcpy(a,"Sad");
//字符指针,可以多次赋值不同字符串
char *b = "Friend";
b = "Family";
b++;
//*b = 'H';//不能修改字符内容

结构体的知识点到这里就写完了,明天写联合体,欲速则不达,慢慢来不着急。

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

我来说两句

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
  • 【C语言基础】结构体赋值

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

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

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

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

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

    老九君
  • Android Studio 4.0 稳定版发布了

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

    GSYTech
  • Go语言基础之结构体(春日篇)

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

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

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

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

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

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

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

    Go进阶者
  • Android面试太难了?除了闷头刷题,程序员应该了解的面试技巧才是关键

    有专家认为,对于一个开发者来说,不只局限于安卓开发者,面试前的准备都是非常重要的,充分的准备可以提高你赢的好工作的几率。那么我们在面试前都应该准备些什么呢?

    Android技术干货分享
  • Android Studio开发之 JNI 篇的简单示例

    Android上层应用使用java开发,不过java并不适合密集型运算,比如图片处理等,遇到密集型运算,一般使用c/c++完成。

    砸漏
  • 手把手教你c语言基础语法——结构体

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

    诸葛青云
  • Android开发笔记(六十九)JNI实战

    NDK全称为Native Development Kit,意即原生的开发工具,NDK允许开发者在APP中通过C/C++代码执行部分程序。它是Android提...

    用户4464237

扫码关注云+社区

领取腾讯云代金券