C语言基础学习之结构体与指针实例
程序员文章站
2022-07-05 22:54:40
c语言基础学习之结构体与指针实例
#define _crt_secure_no_warnings
#include
#include
#include
#include...
c语言基础学习之结构体与指针实例
#define _crt_secure_no_warnings #include #include #include #include
//结构体是一种构造数据类型 //把不同的数据类型整合起来成为一种自定义的数据类型 /*struct man { char* name; int age; }; void main(){ //1.构造方式赋值 struct man m1 = { "jack", 20 }; //2.赋值 struct man m2; m2.age = 30; m2.name = "tom"; printf("%s,%d\n", m2.name, m2.age); getchar(); }*/
//结构体的几种写法 /*struct man { char name[20]; int age; } m1, m2 = { "jack", 20 }; void main(){ //对于char数组的赋值要使用strcpy函数,这个函数是string.h中的 strcpy(m1.name, "tom"); m1.age = 30; printf("%s,%d \n", m1.name, m2.age); getchar(); }*/
//匿名结构体 /*struct { char* name; int age; } m1; void main(){ m1.age = 30; m1.name = "tom"; printf("%s,%d\n", m1.name, m1.age); getchar(); }*/
//结构体嵌套 /*struct teacher{ char* name; }; struct student{ char* name; int age; //内部嵌套teacher结构体 struct teacher t; }; void main(){ //赋值 struct student s1 = { "tom", 20, { "jack" } }; //依次输出学生的姓名,年龄,老师姓名 printf("%s,%d,%s\n", s1.name, s1.age, s1.t.name); getchar(); }*/
//结构体嵌套2 /*struct student{ char* name; int age; struct teacher{ char *name; } t; }; void main(){ //依次赋值 struct student s1 = { "tom", 20,"rose"}; //依次输出学生的姓名,年龄,老师姓名 printf("%s,%d,%s\n", s1.name, s1.age,s1.t.name); getchar(); }*/
//结构体和指针 /*struct student{ char* name; int age; }; void main(){ struct student s1 = { "tom", 16 }; struct student* p = &s1; //这三种表示方法相同 printf("%s,%d \n", s1.name, s1.age); printf("%s,%d \n",(*p).name,(*p).age); //“->”(箭头)是“(*p).”简写形式 printf("%s,%d \n",p->name,p->age); getchar(); }*/ //指针数组及其遍历 /*struct student{ char* name; int age; }; void main(){ //结构体数组 struct student starr[] = { { "tom", 20 },{"rose",16} }; //遍历 struct student* p=&starr; //第一种遍历 for (; p < starr+2; p++) { printf("%#x\n",p); printf("%s,%d\n",(*p).name,(*p).age); printf("%s,%d\n", p->name, p->age); } //第二种遍历 int i = 0; for (; i//结构体的大小(字节大小) /*struct man{ int age; double weight; }; void main(){ struct man m1 = { 20, 89.0 }; //结构体变量的大小,必须是最宽基本数据类型的整数倍 //提升读取的效率 printf("%#x,%d",&m1,sizeof(m1)); getchar(); }*///结构体和动态内存分配 /*struct man{ char* name; int age; }; void main(){ //动态分配10个man结构体大小 struct man* m_p=(struct man*)malloc(sizeof(struct man) * 10); struct man* p = m_p; p->name = "rose"; p->age = 16; p++; p->name = "jack"; p->age = 20; //遍历数组 struct man* loop_mam = m_p; for (; loop_mam < m_p + 2; loop_mam++){ printf("%s,%d \n", loop_mam->name, loop_mam->age); } //释放指针 free(m_p); getchar(); }*///typedef 类型取别名 //1.不同名称代表在干不同的事情typedef int jint; //2.不同情况下,使用不同的别名 //#if defined(__cplusplus) //typedef _jnienv jnienv; //typedef _javavm javavm; //3.书写简洁 //给类型取别名 //age是int的别名 /*typedef int age; //ap是int类型指针的别名 typedef int* ap; struct man{ char* name; int age; }; //给结构体取别名 //可以很方便的辨别 typedef struct man javaman; typedef struct man* jm; //简写 //w是给woman结构体取的别名 //*wm是woman结构体指针的别名 typedef struct woman{ char* name; int age; } w,*wm; void main(){ //结构体变量 w w1 = { "tom", 16 }; //结构体指针变量 wm wm = &w1; printf("%s,%d\n", w1.name, w1.age); printf("%s,%d\n", wm->name, wm->age); getchar(); }*///结构体函数指针成员 /*struct girl{ char* name; int age; //函数指针 void(*say)(char*); }; //girl结构体类似于java中的类,name和age类似于属性,sayhi类似于方法 void sayhi(char* c){ messagebox(0, c, "title", 0); } void main(){ struct girl girl; girl.name = "rose"; girl.age = 16; girl.say = sayhi; girl.say("hello world"); getchar(); }*/typedef struct girl{ char* name; int age; //函数指针 void(*say)(char*); } girl; //girl结构体指针取别名girlp typedef girl* girlp; void sayhi(char* text){ messagebox(0, text, "title", 0); } void rename(girlp gp1){ gp1->name = "lily"; } void main(){ //赋值 girl g1 = { "lucy", 18, sayhi }; //指针 girlp gp1 = &g1; //调用方法 gp1->say("byebye!"); //传递指针,改名 //rename(&g1); 这个老是错误 getchar(); }(starr)>