android ndk 04 C语言 结构体_结构体指针,typedef
来源:互联网 发布:视频录制软件电脑 编辑:程序博客网 时间:2024/06/03 22:01
### 结构体_结构体指针,typedef
结构体定义
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h>#include <Windows.h>//上面的头文件 下面几个例子都要有//结构体 关键字 struct //结构体是一种构造数据类型//把不同的数据类型整合起来成为一个自定义的数据类型struct Man{ //成员 char name[20]; int age; //int (*func)();//也可以是函数指针};void main(){ //1.初始方式第一种 //struct Man m1 = { "name", 26 }; //2.初始方式 第二种 struct Man m1; m1.age = 26; //m2.name = "struct_name";//这样会报错 前面说过字符串初始化的方式 这里有两种方式 1 改变结构体的name为指针 2 使用拷贝函数 strcpy(m1.name, "cpy_name"); sprintf(m1.name, "sprintf_name");//这两种方式都可以 赋值 printf("%s,%d\n", m1.name, m1.age); //struct 可以相互赋值 struct Man m2 = m1; printf("%s,%d\n", m2.name, m2.age); getchar();}
效果图
01:
结构体的写法
//结构体的写法 struct Man{ //成员 char name[20]; int age; }m1, m2 = { "jack", 20 }; void main(){ strcpy(m1.name, "m1name"); m1.age = 10; printf("%s,%d\n", m2.name, m2.age); //printf("%s,%d\n", m1.name, m1.age); getchar(); } ``` 效果图01:![image](http://otqn9ztu1.bkt.clouddn.com/ndk04_2.png)#### 匿名结构体 ```//匿名结构体struct { char name[20]; int age;}m1;
结构体嵌套
//结构体嵌套 struct teacher{ char name[20];};struct student{ char name[20]; int age; struct teacher t;};void main(){ //如何进行赋值 字面量的方式 //struct student s1 = { "jack", 21, {"name"} }; //或者 struct student s1; s1.age = 10; //s1.t.name = "liu";//需要使用拷贝函数 strcpy(s1.name, "student_name"); strcpy(s1.t.name, "lml"); printf("%s,%d,%s\n", s1.name, s1.age, s1.t.name); system("pause");}
01:
还可以这样写
//还可以这样写struct Student{ char name[20]; int age; struct Teacher{ char name[20]; }t;};void main(){ struct Student s1; strcpy(s1.t.name, "lml");//和上面一样的效果 system("pause");}
结构体指针
结构体指针1
struct Man{ char name[20]; int age;};void main(){ struct Man m1 = { "name", 30 }; //结构体指针 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); system("pause");}
结构体指针2
指针与结构体数组
struct Man{ char name[20]; int age;};void main(){ struct Man mans[] = { { "jack", 20 }, { "rose", 19 } };//遍历数组 两种方式 //1 struct Man *p = mans; for (; p < mans + 2; p++){ printf("%s,%d\n", p->name, p->age); } //2 int i = 0; for (; i < sizeof(mans) / sizeof(struct Man); i++){ printf("%s,%d\n", mans[i].name, mans[i].age); } system("pause");}
结构体的大小
//结构体变量的大小,必须是最宽基本数据类型的整数倍 (16/8 16/4 都能整除 )//提升读取的效率struct Man{ int age;//4字节 double weight;//8字节};void main(){ struct Man m1 = {20,89.0}; printf("%#x,%d\n",&m1,sizeof(m1)); getchar();}
可以看到 打印出来是16个字节 怎么算出来的? age 4字节 weight 8字节 那么 16 都能整除 时间换空间 空间换时间
结构体与动态内存分配
struct Man{ char *name; int age;};void main(){ struct Man *m_p = (struct Man*)malloc(sizeof(struct Man) * 10); struct Man *p = m_p;//这样赋值的话就不会改变 *m_p //赋值 p->name = "jack"; p->age = 20 ; p++;//下一个 p->name = "rose"; p->age = 18; 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 类型取别名//1.不同名称代表在干不同的事情typedef int jint; //2.不同情况下,使用不同的别名//#if defined(__cplusplus)//typedef _JNIEnv JNIEnv;//typedef _JavaVM JavaVM;//3.书写简洁struct Man{ char name[20]; int age;};typedef struct Man JavaMan;typedef struct Man* JM;//取别名//Age 就是 int类型的别名typedef int Age;//Ap 就是 int类型指针的别名typedef int* Ap;//简写typedef struct Woman{ char name[20]; int age;}W,*Wp;//W 是woman结构体的别名, WP 是woman结构体指针的别名void main(){ int i = 5; Ap p = &i;//这里AP 就是int 类型指针的别名 //结构体变量 W w1 = { "rose", 20 }; //结构体指针 Wp wp1 = &w1; printf("%s,%d\n", w1.name, w1.age); printf("%s,%d\n", wp1->name, wp1->age); system("pause");}
运行结果
结构体函数指针成员
//结构体函数指针成员struct Girl{ char *name; int age; //函数指针 void(*sayHi)(char*);};//Girl结构体类似于Java中的类,name和age类似于属性,sayHi类似于方法void sayHi(char* text){ MessageBoxA(0, text, "titel", 0);//弹框}void main(){ struct Girl g1; g1.age = 19; g1.name = "Lucy"; g1.sayHi = sayHi; sayHi("nihao"); system("pause");}
运行结果
–下面一个是上面的变种
还是结构体函数指针 增加了一个方法
typedef struct Girl{ char *name; int age; //函数指针 void(*sayHi)(char*);}Girl;//Girl结构体指针取别名GirlPtypedef Girl* GirlP;void sayHi(char* text){ MessageBoxA(0, text, "title", 0);}//通过传递指针改名void MyRename(Girl* gp1, char* text){ printf("%s,%d\n", gp1->name, gp1->age); gp1->name = text;}void main(){ Girl g1 = { "Lucy", 18, sayHi }; printf("%s,%d\n", g1.name,g1.age); GirlP gp1 = &g1; gp1->sayHi("firstName"); //传递指针改名 MyRename(gp1, "newname"); printf("gp1 = %s,%d\n", gp1->name, gp1->age); if (NULL != gp1){ gp1 = NULL; free(gp1); } system("pause");}
这里 有个坑啊 我一开始 想使用rename 这个方法 但是c里面库里面已经有这个 方法了
导致我这里一直报错 找不到原因 改成Myrename 就好了 下面放一下结果图
阅读全文
0 0
- android ndk 04 C语言 结构体_结构体指针,typedef
- C语言结构体及typedef关键字定义结构体别名和函数指针的应用
- C语言结构、共用体、Typedef
- C语言 数组 结构体 typedef
- C语言中typedef 与结构体
- C语言之typedef和结构体
- iOS C语言9_结构体指针
- C语言_指向结构体的指针_plusC14.4
- C语言_结构体
- C语言_结构体
- C语言_结构体
- Android JNI编程(六)——C语言函数指针、Unition联合体、枚举、Typedef别名、结构体、结构体指针
- c语言结构体指针
- C语言---结构体指针
- 【C语言】结构体指针
- 从C开始_结构体_结构指针
- C语言指针-----指针与结构体
- 浅谈c语言typedef 与结构体指针(个人小经验)
- Java-堆排序
- 有关图片上传c:\fakePath等问题
- 【算法】用两个栈模拟实现队列
- 机器学习概述
- Java堆排序
- android ndk 04 C语言 结构体_结构体指针,typedef
- 单例模式入门
- CSS3中的mix-blend-mode和background-blend-mode
- python类的理解(一)
- UVA10048[Audiophobia] FLoyed求最大值最小化
- Codeforces-830D Singer House(组合数+dp)
- Fliping game HDU
- 【LeetCode】
- 浅析Linux命令之sed