C语言快速讲解(五)结构体与指针
来源:互联网 发布:软件演示平台 编辑:程序博客网 时间:2024/05/16 12:48
前言:作为一个安卓程序员,如果不懂C/C++开发,那么安卓jni、NDK、视频解码、音频解码也没法开发,有需求我们就要学习,加油吧!今天开始我们快速讲解C语言,有Java基础的人适合看本博客。
----------分割线-----------
需要用的一些头文件:
#define _CRT_SECURE_NO_WARNINGS#include <stdlib.h>#include <stdio.h>#include <string.h>#include <Windows.h>----------分割线--------
1.解释:结构体是一种构造数据类型,把不同的数据类型整合起来成为一个自定义的数据类型,看例子:
struct Man{//成员char name[20];int age;};void main(){//初始化结构体的变量//1.struct Man m1 = {"Jack",21};printf("m1的值%s,%d\n",m1.name,m1.age);//2.struct Man m2;//m2.name = "Rose";m2.age = 20;strcpy(m2.name,"Rose");sprintf(m2.name,"K");printf("m2的值%s,%d\n", m2.name, m2.age);//类似JavaScript字面量赋值,只能在变量声明时赋值struct Man m3 = m2;printf("m3的值%s,%d\n", m3.name, m3.age);getchar();}
2.结构体的其他写法:
struct Man{char name[20];int age;} m1, m2 = { "A", 20 };//m1结构体变量名void main(){strcpy(m1.name, "B");m1.age = 11;printf("m1的值%s,%d\n", m1.name, m1.age);printf("m2的值%s,%d\n", m2.name, m2.age);getchar();}3.匿名结构体(控制结构体变量的个数,相当于java中的单例):
struct{char name[20];int age;}m1;4.结构体嵌套:
struct Teacher{char name[20];};struct Student{char name[20];int age;struct Teacher t;};void main(){struct Student s1 = { "A", 19, {"TT"} };printf("s1的值%s,%d,%s\n", s1.name, s1.age, s1.t.name);struct Student s2;s2.age = 20;strcpy(s2.name, "ss");strcpy(s2.t.name,"tt");printf("s2的值%s,%d,%s\n", s2.name, s2.age, s2.t.name);getchar();}5.结构体嵌套2:
struct Student{char name[20];int age;struct Teacher{char name[20];}t;};void main(){struct Student s1 = { "A", 19, { "TT" } };printf("s1的值%s,%d,%s\n", s1.name, s1.age, s1.t.name);struct Student s2;s2.age = 20;strcpy(s2.name, "ss");strcpy(s2.t.name, "tt");printf("s2的值%s,%d,%s\n", s2.name, s2.age, s2.t.name);getchar();}6.结构体与指针:
struct Man{char name[20];int age;};void main(){struct Man m1 = {"w",20};//结构体指针struct Man *p = &m1;printf("m1地址是%#x\n",p);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();}
6_2.结构体与指针:
struct Man{char name[20];int age;}M,*MP;void main(){//给结构体的成员变量赋值strcpy(M.name,"A");M.age = 20;//给指针赋值MP = &M;printf("%s,%d\n",MP->name,MP->age);getchar();}7.指针与结构体数组:
struct Man{char name[20];int age;};void main(){struct Man mans[] = { {"A",1}, {"B",2}, {"C",3} };//遍历结构体数组//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);}getchar();}8.结构体的大小:
struct Man{int age;double weight;};void main(){//结构体变量的大小,必须是最宽基本数据类型的整数倍//提升读取的效率struct Man m1 = { 20, 20.4 };printf("地址:%#x\n大小:%d\n",&m1,sizeof(m1));getchar();}9.结构体与动态内存分配:
struct Man{char *name;int age;};void main(){struct Man *m_p = (struct Man*)malloc(sizeof(struct Man)*20);struct Man *p = m_p;//赋值p->name = "jack";p->age = 20;p++;p -> name = "rose";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类型取别名。
优点:1.不同的名称代表在干不同的事情typedef int jint
2.不同情况下,使用不同的别名
//#if defined(__cplusplus)
//typedef _JNIEnv JNIEnv;
//typedef _JavaVM JavaVM;
3.书写简单
例子:
struct Man{char name[20];int age;};//Age int类型的别名typedef int Age;//Age int类型指针的别名typedef int* Ap;typedef struct Man JavaBean;typedef struct Man* JM;//结构体取别名//简写typedef struct Woman{char name[20];int age;} W,*WP;//W是Woman结构体的别名,WP是Woman结构体指针的别名//typedef struct Woman W;//typedef struct Woman* WP;void main(){int i = 5;Ap p = &i;printf("i的地址是%#x\n",p);//结构体变量W w1 = {"Rose",20};//结构体指针WP wp1 = &w1;printf("w1的地址:%#x,w1的name值:%s,age的值%d\n",wp1,w1.name,w1.age);printf("w1的地址:%#x,w1的name值:%s,age的值%d\n", wp1, wp1->name, wp1->age);getchar();}-------------分割线------------
结构体函数指针成员
struct Girl{char *name;int age;//函数指针void(*say)(char*);};//girl结构体类似于Java中的类,name和age类似于属性,say类似于方法void say(char* text){MessageBox(0,text,"title",0);}void main(){struct Girl g1;g1.name = "jack";g1.age = 20;g1.say = say;g1.say("你好");printf("%s,%d\n",g1.name,g1.age);getchar();}--------完-------
阅读全文
0 0
- C语言快速讲解(五)结构体与指针
- C语言指针-----指针与结构体
- C语言快速讲解(二)指针的用法
- C语言 指针与数组,结构体
- c语言结构体与指针
- C语言基础及指针⑦结构体与指针
- C语言 结构体与结构体指针用法总结
- C语言基础五(结构体)
- C语言指针讲解
- C语言指针讲解
- c语言结构体指针
- C语言---结构体指针
- 【C语言】结构体指针
- C语言——结构体与指针引用&结构体数组与指针引用
- C语言结构体中的函数指针与函数
- c语言结构体中的函数指针与函数
- C语言指针与结构体,示例代码
- C语言 与结构体相关 函数 指针 数组
- 腾讯云IM中经常使用的路径
- py 一些built-in函数
- 文章标题
- python--configparser模块,subprocess模块
- Java synchronized详解
- C语言快速讲解(五)结构体与指针
- HanLPTokenizer HanLP分词器
- mysql in 多张表
- SSM框架CRUD代码生成器
- IIS 内部运行机制
- 第一次ACM选拔赛
- LeetCode-409. Longest Palindrome (Java)
- iOS开发中的几种设计模式以及各自的优点
- let声明和块级作用域