当前位置: 首页 > news >正文

嵌入式学习第十三天

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

相关文章:

  • 林浩然的Java奇幻之旅:编码舞蹈、编程精灵与IDE仙境
  • ###C语言程序设计-----C语言学习(6)#
  • 【运维】Ubuntu18.04系统docker方式安装ElasticSearch和kibana
  • Linux CPU 负载说明
  • 在linux、window环境搭建kafka环境
  • C语言——O / 动态内存管理
  • 实习记录——第五天
  • 一些反序列化总结
  • C语言指针进阶之三——函数指针、函数指针数组、指向函数指针数组的指针
  • kali系统入侵电脑windows(win11系统)渗透测试,骇入电脑教学
  • diff命令详解
  • PalWorld/幻兽帕鲁Ubuntu 22.04 LTS 一键部署脚本
  • React中使用LazyBuilder实现页面懒加载方法一
  • 头歌C语言结构体
  • 【驱动】TI AM437x(内核调试-07):devmem2直接读写内存、寄存器,devkmem读取内核变量
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【Amaple教程】5. 插件
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • create-react-app项目添加less配置
  • express.js的介绍及使用
  • Git同步原始仓库到Fork仓库中
  • iOS 颜色设置看我就够了
  • Java方法详解
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • web标准化(下)
  • 从零搭建Koa2 Server
  • 好的网址,关于.net 4.0 ,vs 2010
  • 技术:超级实用的电脑小技巧
  • 力扣(LeetCode)22
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 王永庆:技术创新改变教育未来
  • 译自由幺半群
  • 进程与线程(三)——进程/线程间通信
  • ​2021半年盘点,不想你错过的重磅新书
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #Z0458. 树的中心2
  • (07)Hive——窗口函数详解
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (c语言)strcpy函数用法
  • (分布式缓存)Redis持久化
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (转)创业家杂志:UCWEB天使第一步
  • .Net 4.0并行库实用性演练
  • .net core 依赖注入的基本用发
  • .NET DataGridView数据绑定说明
  • .Net IE10 _doPostBack 未定义
  • .net 简单实现MD5
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET企业级应用架构设计系列之应用服务器
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @Repository 注解
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解