C语言期末复习笔记(下)

news2025/1/4 11:57:19

目录

九、指针

1.指针变量的定义和初始化

2.间接寻址符*

 3.按值调用和按址调用

4.实例

5.函数指针

6.指针变量和其它类型变量的对比

十、字符串

1.字符串常量

2.字符串的存储

3.字符指针

4.字符串的访问和输入/输出

5.字符串处理函数

(1)strlen(计算字符串长度)

(2)strcpy(字符串复制)

(3) strcat(字符串连接)

(4)strcmp(字符串比较)

 (5)实例

(6)其它函数

6.向函数传递字符串

7.自己实现字符串处理函数

(1)MyStrcpy

(2)MyStrlen 

(3)MyStrcat 

十一、 指针和数组

1.指针和一维数组的关系

2.指针和二维数组的关系

3.指针或数组参数传参注意

4.指针数组

gets和puts的使用

5.指针数组用来表示命令行参数

6.C程序的内存映像

7.动态内存分配函数

十二、结构体

1.结构体类型的声明

2.结构体变量的定义

3.用typedef定义数据类型

4.结构体变量的初始化

5.嵌套的结构体

6.结构体变量的引用 

7.结构体所占内存的字节数

8.结构体数组的定义和初始化

9.结构体指针的定义和初始化

10.向函数传递结构体

十三、共用体 

 十四、枚举数据类型


九、指针

1.指针变量的定义和初始化

指针变量使用之前必须初始化

 2.间接寻址符*

引用指针所指向的变量的值称为指针的解引用

 3.按值调用和按址调用

指针变量作函数参数可以修改实参的值

4.实例

 

当函数需要给回主函数两个或两个以上参数时,无法使用return返回值进行返回,就可以采用指针变量传参的方式

5.函数指针

 使用函数指针

 

 6.指针变量和其它类型变量的对比

十、字符串

1.字符串常量

2.字符串的存储 

3.字符指针

 4.字符串的访问和输入/输出

 

对于scanf来说,空格、回车或制表(Tab)符是输入数据的分隔符,因而不能被读入,输入遇到这些字符时,系统认为字符串输入结束 

例如:

 fgets()函数的最大读取大小是其“第二个参数减1”,这是由于字符串是以’\0’为结束符的,fgets()为了保证输入内容的字符串格式,当输入的数据大小超过了第二个参数指定的大小的时候,fgets()会仅仅读取前面的“第二个参数减1”个字符,而预留1个字符的空间来存储字符串结束符’\0’

5.字符串处理函数

(1)strlen(计算字符串长度)

结果是5 

(2)strcpy(字符串复制)

 

(3) strcat(字符串连接)

(4)strcmp(字符串比较)

 (5)实例

(6)其它函数

6.向函数传递字符串

 7.自己实现字符串处理函数

(1)MyStrcpy

(2)MyStrlen 

(3)MyStrcat 

 

十一、 指针和数组

1.指针和一维数组的关系

数组名是一个常量指针,不能修改该指针的指向

指针可当数组名使用

2.指针和二维数组的关系

行地址 

 

列地址 

行指针 

列指针 

 二维数组传入函数

 

 3.指针或数组参数传参注意

4.指针数组

gets和puts的使用

1、gets() 的作用是从键盘上读取字符串,跟scanf() 相似,但又有所不同。
gets() 函数的用法:


gets(字符串的首地址);


例:

char str [20]; .
gets(str);


须要注意的是:
(1) gets() 可以接收空格、Tab键, 碰到回车键输入才结束;而scanf碰到空格、回车、Tab键 都会结束输入。
(2) gets() 和scanf() 都不能检测越界。

2、puts() 的作用是 向显示屏输出字符串并换行。
用法:
puts (字符串的首地址) ;

例:
char[]=" helloworld";
pus(str);


printf需要添加"\n'用来换行,而puts在 输出的时候会将字符串末尾的\0'自动换成\n'

5.指针数组用来表示命令行参数

 

6.C程序的内存映像

 7.动态内存分配函数

 

malloc() 

 calloc

注意 :int (*p)[3]和int *p[3]的区别如下:

1. 声明的含义

  • int (*p)[3]

    • 这是一个指针,指向一个包含 3 个 int 元素的数组。
    • p 是一个指针,它所指向的数据类型是 int[3](一个有 3 个 int 元素的数组)。
  • int *p[3]

    • 这是一个数组,数组的元素是 int 类型的指针。
    • p 是一个数组,该数组包含 3 个元素,每个元素的类型是 int*(指向 int 的指针)。

2. 内存布局和使用示例

  • int (*p)[3]

  • #include <stdio.h>
    int main() {
        int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
        int (*p)[3];  // 定义一个指针,指向一个包含 3 个 int 元素的数组
        p = arr;  // 让 p 指向 arr 的第一行
        // 访问元素
        for (int i = 0; i < 2; ++i) {
            for (int j = 0; j < 3; ++j) {
                printf("%d ", (*p)[j]);  // 先解引用 p 得到数组,再通过 [] 访问元素
            }
            p++;  // 指向下一个 3 元素的数组
        }
        return 0;
    }

  • 在这个例子中,p 是一个指针,它可以指向一个 int[3] 类型的数组。当我们将 p 指向 arr 的第一行时,通过 (*p)[j] 来访问元素。p++ 操作会让 p 指向下一个包含 3 个 int 的数组(在二维数组中,即下一行)。

int *p[3]

#include <stdio.h>
int main() {
    int a = 1, b = 2, c = 3;
    int *p[3];  // 定义一个数组,元素是 int 指针
    p[0] = &a;
    p[1] = &b;
    p[2] = &c;
    // 访问元素
    for (int i = 0; i < 3; ++i) {
        printf("%d ", *(p[i]));  // 先通过 [] 获取指针,再解引用
    }
    return 0;
}
  • 这里 p 是一个数组,存储了 3 个 int 指针。p[0]p[1] 和 p[2] 分别存储了 ab 和 c 的地址,通过 *(p[i]) 来访问它们指向的 int 元素。

3. 指针运算和内存地址

  • int (*p)[3]

    • 当对 p 进行指针运算(如 p++)时,p 的地址会增加 3 * sizeof(int),因为它指向的是一个包含 3 个 int 元素的数组,每次移动到下一个这样的数组。
  • int *p[3]

    • 对于 p[i](其中 i 从 0 到 2),p[i] 是 int* 指针,当对 p[i] 进行指针运算时,其地址会增加 sizeof(int),因为它们指向的是单个 int 元素。

4. 总结

  • int (*p)[3] 强调的是一个指针,该指针专门指向包含 3 个 int 元素的数组,适合用于处理二维数组,其中第二维大小固定为 3。
  • int *p[3] 是一个数组,其中存储的元素是 int 指针,可存储 3 个不同 int 变量的地址,可指向不同位置的 int 元素,使用更灵活,可指向不同长度的 int 数组或不同的 int 元素。

十二、结构体

1.结构体类型的声明

这时还没有声明结构体变量 

2.结构体变量的定义

3.用typedef定义数据类型

 4.结构体变量的初始化

5.嵌套的结构体

6.结构体变量的引用 

7.结构体所占内存的字节数

8.结构体数组的定义和初始化

 

9.结构体指针的定义和初始化

 

10.向函数传递结构体

 

 

例题

 

十三、共用体 

 

 十四、枚举数据类型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2269982.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

保姆级教程Docker部署ClickHouse镜像

目录 1、安装Docker及可视化工具 2、创建挂载目录 3、获取配置文件 4、运行ClickHouse容器 5、Compose运行ClickHouse容器 6、查看ClickHouse运行状态 7、安装包部署 1、安装Docker及可视化工具 Docker及可视化工具的安装可参考&#xff1a;Ubuntu上安装 Docker及可视化…

飞牛私有云APP结合cpolar内网穿透技术实现远程连接本地fnOS NAS

文章目录 前言1. 本地连接测试2. 飞牛云安装Cpolar3. 配置公网连接地址4. 飞牛云APP连接测试5. 固定APP远程地址6. 固定APP地址测试 前言 现在生活和工作中的各种设备都变得越来越智能&#xff0c;而数据存储的需求也随之剧增。想象一下&#xff1a;你正在外地出差&#xff0c…

计算机网络 (17)点对点协议PPP

一、PPP协议的基本概念 PPP协议最初设计是为两个对等节点之间的IP流量传输提供一种封装协议&#xff0c;它替代了原来非标准的第二层协议&#xff08;如SLIP&#xff09;。在TCP/IP协议集中&#xff0c;PPP是一种用来同步调制连接的数据链路层协议&#xff08;OSI模式中的第二层…

RC充电电路仿真与分析

RC充电原理 下图是一个常见的RC充电电路&#xff1a;&#xff08;假设R10K&#xff0c;C100nF&#xff09; SW断开时&#xff0c;这个电路处于断路状态&#xff0c;C既没有充电也没有放电&#xff1b;SW闭合时&#xff0c;直流电源5V为电容C充电&#xff1b; 充电时电容两端…

全新免押租赁系统助力商品流通高效安全

内容概要 全新免押租赁系统的推出&#xff0c;可以说是一场商品流通领域的小革命。想象一下&#xff0c;不再为押金烦恼&#xff0c;用户只需通过一个简单的信用评估&#xff0c;就能快速租到所需商品&#xff0c;这种体验简直令人惊喜&#xff01;这个系统利用代扣支付技术&a…

c++领域展开第八幕——类和对象(下篇 初始化列表、类型转换、static成员)超详细!!!!

文章目录 前言一、初始化列表二、类型转换三、static成员总结 前言 上篇博客我们实现了一个简单的日期类&#xff0c;基本的类和对象是清楚了 今天我们再来学习后面的一些类和对象的语法&#xff0c;慢慢的完善所学的东西 fellow me 一、初始化列表 • 之前我们实现构造函数时…

Linux-Ubuntu之RGBLCD显示屏

Linux-Ubuntu之RGBLCD显示屏 一&#xff0c;实现原理二&#xff0c;驱动代码三&#xff0c;总结1.c语言知识 一&#xff0c;实现原理 采用的是4.3寸 800480显示屏&#xff0c;即每行有800个像素点&#xff0c;每列有480个像素点&#xff0c;外接时钟信号&#xff0c;控制刷新频…

JVM 主要组成部分与内存区域

一、JVM 主要组成部分&#xff1a; JVM的主要包含两个组件和两个子系统&#xff0c;分别为&#xff1a; &#xff08;1&#xff09;本地库接口(Native Interface)&#xff1a;与native lib(本地方法库)交互&#xff0c;融合其他编程语言为Java所用&#xff0c;是与其它编程语言…

如何在鸿蒙本地模拟器中使用HDC工具

引言 HDC是指华为设备连接&#xff08;Huawei Device Connector&#xff09;工具。它的作用类似Android开发的ADB工具。在华为鸿蒙&#xff08;HarmonyOS&#xff09;操作系统的开发过程中&#xff0c;HDC工具起到了至关重要的作用。它允许开发者在开发主机&#xff08;如 PC&…

ruoyi 分页 查询超出后还有数据; Mybatis-Plus 分页 超出后还有数据

修改&#xff1a;MybatisPlusConfig 类中 分页合理化修改为&#xff1a;paginationInnerInterceptor.setOverflow(false);

Unity中实现转盘抽奖效果(二)

如果要使转盘停止时转到到指定位置&#xff0c;应该如何做&#xff1f; 实现思路&#xff1a; 也就是在需要停止的分数的区间范围内&#xff0c;随机一个角度值&#xff0c;然后反推需要在哪个角度开始减速&#xff0c;如果转盘的当前角度和需要开始减速的角度有差值&#xf…

苍穹外卖04——Redis初入门 在店铺打烊or营业状态管理功能中的使用

Redis入门 redis简介 它以键值对的形式存储数据在内存中,并且以极高的性能和灵活性而著称,通常用于缓存、消息代理以及持久化数据。 - 基于内存存储,读写性能高- 适合存储热点数据(热点商品、资讯、新闻)- 企业应用广泛Windows版下载地址:https://github.com/microsoft…

深度学习每周学习总结R2(RNN-天气预测)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客R5中的内容&#xff0c;为了便于自己整理总结起名为R2&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 目录 0. 总结1. RNN介绍a. 什么是 RNN&#xff1f;RNN 的一般应用场景 b. 传统 RNN …

CUDA与Microsoft Visual Studio不兼容问题

简介&#xff1a;在安装一些 python库时&#xff0c;涉及到第三方库&#xff08;特别是需要引用 C 代码&#xff09;时&#xff0c;通常的安装方式会涉及到编译过程&#xff0c;通常称为"源代码安装"&#xff08;source installation&#xff09;&#xff0c;或是 “…

WordPress网站中如何修复504错误

504网关超时错误是非常常见的一种网站错误。这种错误发生在上游服务器未能在规定时间内完成请求的情况下&#xff0c;对访问者而言&#xff0c;出现504错误无疑会对访问体验大打折扣&#xff0c;从而对网站的转化率和收入造成负面影响。 504错误通常源于服务器端或网站本身的问…

Springboot 升级带来的Swagger异常

当升级到Springboot 2.6.0 以上的版本后&#xff0c;Swagger 就不能正常工作了, 启动时报如下错误。当然如果你再使用sping boot Actuator 和 Springfox, 也会引起相关的NPE error. (github issue: https://github.com/springfox/springfox/issues/3462) NFO | jvm 1 | 2022/04…

发现API安全风险,F5随时随地保障应用和API安全

分析数据显示&#xff0c;目前超过90%的基于Web的网络攻击都以API端点为目标&#xff0c;试图利用更新且较少为人所知的漏洞&#xff0c;而这些漏洞通常是由安全团队未主动监控的API所暴露。现代企业需要一种动态防御策略&#xff0c;在风险升级成代价高昂、令人警惕且往往无法…

【数据结构】(Python)差分数组。差分数组与树状数组结合

差分数组&#xff1a; 基于原数组构造的辅助数组。用于区间修改、单点查询。区间修改的时间复杂度O(1)。单点查询的时间复杂度O(n)。差分数组的元素&#xff1a;第一个元素等于原数组第一个元素&#xff0c;从第二个元素开始是原数组对应下标的元素与前一个元素的差&#xff0…

12.30-1-5学习周报

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 文章链接摘要Abstract一、方法介绍1.HAT-CIR2.Horde3.DWGRNet 二、实验总结 文章链接 https://arxiv.org/pdf/2405.04101 摘要 本博客介绍了论文《Continual lea…

Android OpenGl(二) Shader

一、Shader 1、什么是Shader&#xff0c;为什么要使用Shder &#xff08;1&#xff09;shader运行在gpu上的小程序 &#xff08;2&#xff09;以前使用固定管线&#xff0c;但缺点是灵活度不够&#xff0c;无法满足复杂需求&#xff0c;为了解决固定管线的缺点&#xff0c;出…