C语言编程进阶应用

  1. @[TOC]结构体拷贝
#include <stdio.h>

struct People{

    int age;

    char* name;

};
int main()
{
    struct People p;
    p.age = 20;
    p.name = "zhangshan";
    printf("age:%d\n",p.age);
    struct People p1 = p;  //内存的拷贝

    p.age = 100;
    p.name = "lisi";
    printf("age:%d\n",p1.age);
    return 0;
}
  1. 结构体指针
    其中->和.的区别:
    A *p则使用:p->mode; 左边是结构指针。
    A p 则使用:p.mode; 左边是结构变量。
    总结:
    箭头(->):左边必须为指针;
    点号(.):左边必须为实体。
    指针指向的结构体需要取地址&,数组不需要,数组名称指向第一个数组内容地址。
#include <stdio.h>
#include <stdlib.h>
typedef struct	STRUCT_SAVEDATA
{
	u8 edit_mode[10];	//可编辑模式
	u8 level;			//速度
	u8 mode;			//模式单一模式
	u16 time;			//工作时间
}Savedata_TypeDef;
Savedata_TypeDef Run_d;
Savedata_TypeDef Save_data;

int main()
{
	Save_data.mode=10;
	Run_d=Save_data;	//结构体复制
	Run_d.mode=100;
	Savedata_TypeDef *p_s=malloc(sizeof(Run_d));//申请一个结构体空间,指向这个空间地址
	p_s=&Save_data;			
	p_s->mode=102;	//修改Save_data里的值
	Savedata_TypeDef *p_s1=&Run_d;		//指向Run_d结构体
	printf("p_s Savedata_TypeDef.mode\n%d\n",p_s->mode);//测试功能
	printf("p_s1 Savedata_TypeDef.mode\n%d\n",p_s1->mode);//测试功能
	free(p_s);
}


  1. 函数指针
#include <stdio.h>

#include <stdlib.h>

Savedata_TypeDef Run_d;
void Save_disp(){

	Save_data.mode=10;
	Run_d=Save_data;	
	Run_d.mode=100;
Savedata_TypeDef *p_s=malloc(sizeof(Run_d));
p_s->mode=101;
	printf("p_s Savedata_TypeDef.mode\n%d\n",p_s->mode);//测试功能
p_s=&Save_data;
	printf("p_s Savedata_TypeDef.mode\n%d\n",p_s->mode);//测试功能
p_s->mode=102;
	printf("p_s Savedata_TypeDef.mode\n%d\n",Save_data.mode);//测试功能
Savedata_TypeDef *p_s1=&Run_d;
		
	printf("p_s1 Savedata_TypeDef.mode\n%d\n",p_s1->mode);//测试功能

}
int main()
{
	void (*vp_s)();  //通过一个函数指针
	
	vp_s=Save_disp;//指向函数
	
	vp_s();			//通过指针来执行
	while(1);
}
  1. C语言面向对象
#include <stdio.h>

#include <stdlib.h>
typedef struct	STRUCT_SAVEDATA
{
	u8 edit_mode[10];	//可编辑模式
	u8 level;			//速度
	u8 mode;			//模式单一模式
	u16 time;			//工作时间
}Savedata_TypeDef;
Savedata_TypeDef Run_d;
void Save_disp(){

	Save_data.mode=10;
	Run_d=Save_data;	
	Run_d.mode=100;
Savedata_TypeDef *p_s=malloc(sizeof(Run_d));
p_s->mode=101;
	printf("p_s Savedata_TypeDef.mode\n%d\n",p_s->mode);//测试功能
p_s=&Save_data;
	printf("p_s Savedata_TypeDef.mode\n%d\n",p_s->mode);//测试功能
p_s->mode=102;
	printf("p_s Savedata_TypeDef.mode\n%d\n",Save_data.mode);//测试功能
Savedata_TypeDef *p_s1=&Run_d;
		
	printf("p_s1 Savedata_TypeDef.mode\n%d\n",p_s1->mode);//测试功能

}
typedef struct 
{	   
	int age;
	Savedata_TypeDef Run_d;
	void (*save_dis)();
}s_typedef;


s_typedef *S_Create()
{
	return malloc(sizeof(s_typedef));
}
void S_Delete(s_typedef *s)
{
	free(s);
}
s_typedef* S_Init(s_typedef* s,uint8_t mode)
{
	memset(&s->Run_d,0,sizeof(s->Run_d));
	 s->age= mode;
	s->Run_d.mode=mode;
	s->save_dis=Save_disp;
	return s;
} 
int main()
{
 	s_typedef *s=S_Init(S_Create(),20);
	s->save_dis();
	S_Delete(s); 
	
	while (1)
	{
		
		
		
		
		
	}
}

6.结构体函数指针应用


struct _m_usart_dev
{
	int a;
	void (*init)(int);		//初始化函数指针
	int (*ins)(int);			//识别函数名及参数
	void (*print)();			//打印函数指针
};


void init(int sum);
int insert(int num);
void print();

extern struct _m_usart_dev dev;
//初始化函数
void init(int sum)
{
	dev.a = sum;
}
//识别函数
int insert(int num)
{
	dev.a = num;
	return 1;
}
//打印函数指针
void print()
{
	printf("%d\n", dev.a);
}
//结构体初始化
struct _m_usart_dev dev =
{
	0,
	init,
	insert,
	print,
};
int main()
{
	dev.init(0);
	dev.ins(10);
	dev.print();
	
	while (1)
	{
	}
}

  1. 头文件防止重复
#ifndef __WORK_H
#define __WORK_H
#include "stm32f10x_conf.h"
#define TIME_HOLD		3	//默认保持时间
#define TIME_SHORTIDLE	3	//短间歇时间
#define TIME_LONGIDLE	20	//长间歇时间
#define TIME_HOLDA	 	3	//A保持时间

#endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值