嵌入式学习第十三天

9.指针:

(1)const指针
         const 关键字   常量(只读)

    1.const int *p;
    2.int const *p;

    1和2是等价的
    const修饰 *p,指针变量p的值可以改变,但不能利用指针修改指向空间中的值


    3.int *const p;
    const修饰 p,指针变量p的值不能改变,但可以利用指针变量p修改指向空间中的值
    一定要对指针初始化


    4.const int *const p;
    5.int const *const p;

    4和5是等价的
    const修饰p和*p,指针变量p的值不能改变,也不能利用*p改变直系那个空间中的值

(2)void
    void a;


    int *、double *、char * 转换为 void * 需要强制类型转换(高精度转为低精度)
    void *转换为int *、double *、char *不需要强制类型转换(低精度转为高精度)

    strcpy 拷贝字符串
    memcpy 拷贝一段内存空间

10.函数指针和指针函数:

指针函数:是函数,函数的返回值类型是指针类型
函数指针:是指针,指针指向了函数

(1)指针函数:
        局部变量的地址不能返回,因为局部变量会随函数作用域结束被回收,虽然能够获得返回的地            址,但地址对应的空间已经被回收过了

        将函数的返回值作为下一个函数的参数

(2)函数指针:
        int (*Fun)(int a, int b) = NULL;
        定义函数指针变量Fun,占8个字节空间,指向int返回值有2个int参数的函数

11.C语言中二级指针使用场景:


(1)指针数组传参时:
        char *str[5];

        int Fun(char **ppstr, int len);


(2)函数体内想修改函数体外指针变量值的时候,要传递指针变量的地址即二级指针
        char *p = NULL;

        int Fun(char **pp);

构造数据类型

数据类型:
(1)基本数据类型:
            int 
            double 
            char 
(2)构造数据类型:
            1.struct 结构体
            2.union 共用体
            3.enum  枚举

1.结构体:


(1)结构体类型的定义
        struct 结构体名 
        {
            数据类型1 成员变量1;
            数据类型2 成员变量2;
            数据类型3 成员变量3;
            ..
        };

(2)结构体变量的定义
        数据类型 变量名;
        数据类型 *指针变量名;


(3)结构体变量的初始化:
        1.全部初始化:
            struct student s = {"zhangsan", 'm', 19, 100};

        2.局部初始化:
            struct student stu = {
                .name = "lisi",
                .score = 90,
            };  

(4)结构体成员变量的访问:
        .   :结构体变量类型访问成员变量使用 .
        ->  :结构体指针类型访问成员变量使用 -> 

        整体类型由成员变量类型决定

#include <stdio.h>

struct student 
{
	char name[32];
	char sex;
	int age;
	int score;
};

struct time 
{
	int hour;
	int min;
	int sec;
};

struct date 
{
	int year;
	int mon;
	int day;
};

struct datetime 
{
	struct date day;
	struct time t;
};


int main(void)
{
	struct student s = {"zhangsan", 'm', 19, 90};
	struct student *p = NULL;
	struct datetime dt = {{2024, 1, 29}, {15, 51, 30}};
	struct datetime *pdt = NULL;
	struct student stu = {
		.name = "lisi",
		.score = 100,
	};

	struct datetime now = {
		.day = {
			.year = 2024,
			.day = 29,
		},
		.t = {
			.hour = 16,
			.min = 34,
		},
	};
	
	printf("姓名:%s\n", s.name);
	printf("性别:%c\n", s.sex);
	printf("年龄:%d\n", s.age);
	printf("成绩:%d\n", s.score);

	printf("姓名:%s\n", (&s)->name);
	printf("性别:%c\n", (&s)->sex);
	printf("年龄:%d\n", (&s)->age);
	printf("成绩:%d\n", (&s)->score);
	
	p = &s;
	printf("姓名:%s\n", p->name);
	printf("性别:%c\n", p->sex);
	printf("年龄:%d\n", p->age);
	printf("成绩:%d\n", p->score);

	printf("姓名:%s\n", (*p).name);
	printf("性别:%c\n", (*p).sex);
	printf("年龄:%d\n", (*p).age);
	printf("成绩:%d\n", (*p).score);
	
	printf("%d-%d-%d %d:%d:%d\n", dt.day.year, dt.day.mon, dt.day.day, dt.t.hour, dt.t.min, dt.t.sec);

	pdt = &dt;
	printf("%d-%d-%d %d:%d:%d\n", pdt->day.year, pdt->day.mon, pdt->day.day, pdt->t.hour, pdt->t.min, pdt->t.sec);

	return 0;

}

作业:

1.定义一个结构体包含年-月-日三个成员
        struct date 
        {
            int year;
            int mon;
            int day;
        };
        从终端接收年月日信息存放到结构体中,计算该天为该年的第几天?计算该年剩余多少天?打印年月日信息
    


2.封装一个函数,给定一个数字字符串转换成其对应的整形数
        "123456"
         123456 

         int MyAtoi(char *pstr);

  • 18
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值