当前位置: 移动技术网 > IT编程>开发语言>C/C++ > C语言基础学习之结构体与指针实例

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

2018年09月13日  | 移动技术网IT编程  | 我要评论

保定热线首页,搜泡泡游戏网,词汇控

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();
}

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网