频道栏目
首页 > 资讯 > C语言 > 正文

C语言基础学习之结构体与指针实例

18-07-21        来源:[db:作者]  
收藏   我要投稿

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();
}
相关TAG标签
上一篇:Win10系统下配置Java 环境变量教程
下一篇:结合Windows任务计划程序执行 Robot Framwork 脚本
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站