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

目录

九、指针

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.mzph.cn/web/64793.shtml

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

相关文章

1、蓝牙打印机环境搭建

本项目采用stm32f103c8T6芯片&#xff0c;通过库函数实现打印功能&#xff0c;并配置有小程序蓝牙通信上位机。 1、创建文件夹目录 core文件夹存放核心库文件 LIB文件夹存放标准库函数文件 这里可以删减&#xff0c;用不到的可以不要。 obj存放编译后的文件 project存放项目…

多输入多输出 | Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入多输出预测

多输入多输出 | Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入多输出预测预测效果基本介绍模型背景程序设计参考资料 预测效果 基本介绍 Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入…

Leecode刷题C语言之切蛋糕的最小总共开销②

执行结果:通过 执行用时和内存消耗如下&#xff1a; typedef struct {int *booked;int bookedSize; } MyCalendar;#define MAX_BOOK_SIZE 1001MyCalendar* myCalendarCreate() {MyCalendar *obj (MyCalendar *)malloc(sizeof(MyCalendar));obj->booked (int *)malloc(siz…

力扣-数据结构-10【算法学习day.81】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;建议灵神的题单和代码随想录&#xff09;和记录自己的学习过程&#xff0c;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关…

Vue 全局事件总线:Vue 2 vs Vue 3 实现

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

基于Spring Boot的电影网站系统

一、技术架构 后端框架&#xff1a;Spring Boot&#xff0c;它提供了自动配置、简化依赖管理、内嵌式容器等特性&#xff0c;使得开发者可以快速搭建起一个功能完备的Web应用。 前端技术&#xff1a;可能采用Vue.js、JS、jQuery、Ajax等技术&#xff0c;结合Element UI等组件库…

DeepSpeed训练得到checkpoint如何像Huggingface模型一样评测evaluation?zero_to_fp32.py有什么用?怎么用?

DeepSpeed训练得到checkpoint如何像Huggingface模型一样评测evaluation&#xff1f; 具体步骤 首先看一个样例&#xff1a; 这是我用open-instruct框架&#xff0c;使用DeepSpeed训练1728个steps得到的一个checkpoint。请注意&#xff0c;下文我演示用的例子是基于step_1152&…

最新版Chrome浏览器加载ActiveX控件之CFCA安全输入控件

背景 CFCA安全输入控件用于保证用户在浏览器、桌面客户端、移动客户端中输入信息的安全性&#xff0c;防止运行在用户系统上的病毒、木马等恶意程序入侵窃取用户输入的敏感信息。确保用户输入、本地缓存、网络传输整个流程中&#xff0c;输入的敏感信息不被窃取。广泛应用于银行…

接口测试面试题

接口测试在软件测试中占据重要位置&#xff0c;无论是功能测试还是性能测试&#xff0c;接口的稳定性至关重要。以下总结了一些常见的接口测试面试题&#xff0c;帮助你从容应对面试挑战&#xff01; 面试官常说&#xff1a;“接口测试是测试的重头戏&#xff0c;了解接口的设计…

Easy-Trans反向翻译+Excel导入最佳实践

1、概述 实现用户excel上传、解析、对于用户输入的中文翻译为字典码或者id&#xff0c;实现用户输入的参数校验&#xff0c;最后入库。如果用户输入的参数有问题&#xff0c;返回校验结果给前端。 excel解析使用My-Excel组件&#xff0c;校验使用hibernate-validator&#xff…

高效管理 Nginx 的利器:nginxWebUI 指南和 Docker 部署安装过程

前言 Nginx WebUI 是一个为 Nginx 提供图形化管理界面的工具。通过 WebUI&#xff0c;用户可以轻松管理 Nginx 配置&#xff0c;而无需直接编辑配置文件&#xff0c;尤其适合新手用户和频繁修改配置的场景。 官网文档&#xff1a;nginxWebUI - 文档 本文将分享为什么选择 ngin…

SpringCloud源码-openFeign

LoadBalancer默认只有nacos服务发现器 openFeign与springcloud loadbalancer的结合点 openFeign通过spring cloud loadbalancer进行负载均衡&#xff0c;spring cloud loadbalancer通过discovery client获取nacos的机器列表&#xff0c;然后底层进行负载均衡。

基于微信小程序的校园自助打印系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有实…

从 ELK Stack 到简单 — Elastic Cloud Serverless 上的 Elastic 可观察性

作者&#xff1a;来自 Elastic Bahubali Shetti, Chris DiStasio 宣布 Elastic Cloud Serverless 上的 Elastic Observability 正式发布 — 一款完全托管的可观察性解决方案。 随着组织规模的扩大&#xff0c;一个能够处理分布式云环境的复杂性并提供实时洞察的可观察性解决方…

21.<基于Spring图书管理系统②(图书列表+删除图书+更改图书)(非强制登录版本完结)>

PS&#xff1a; 开闭原则 定义和背景 开闭原则&#xff08;Open-Closed Principle, OCP&#xff09;&#xff0c;也称为开放封闭原则&#xff0c;是面向对象设计中的一个基本原则。该原则强调软件中的模块、类或函数应该对扩展开放&#xff0c;对修改封闭。这意味着一个软件实体…

三、GIT与Github推送(上传)和克隆(下载)

GIT与Github推送&#xff08;上传&#xff09;和克隆&#xff08;下载&#xff09; 一、配置好SSH二、在Github创建仓库三、git克隆&#xff08;下载&#xff09;文件四、git推送&#xff08;上传&#xff09;文件到远程仓库 一、配置好SSH Git与Github上传和下载时需要使用到…

【数字化】华为一体四面细化架构蓝图

导读&#xff1a;华为的“一体四面”企业架构设计方法是一种综合性的管理框架&#xff0c;它通过业务架构、信息架构、应用架构和技术架构的集成设计&#xff0c;构建出一个既符合业务需求&#xff0c;又具备高度灵活性和可扩展性的IT系统。这种架构设计方法强调从业务视角出发…

【linux板卡】lubancat通过vnc远程访问桌面

鲁班猫开发板通过远程VNC连接桌面&#xff1a; 硬件&#xff1a;lubancat2&#xff0c;网线 软件&#xff1a;ssh软件&#xff0c;vnc viewer 参考链接&#xff1a;https://training.eeworld.com.cn/video/38821 1、ssh连接lubancat2 &#xff0c;输入ifconfig查看ip 2、输入 …

解决Springboot整合Shiro+Redis退出登录后不清除缓存

解决Springboot整合ShiroRedis退出登录后不清除缓存 问题发现问题解决 问题发现 如果再使用缓存管理Shiro会话时&#xff0c;退出登录后缓存的数据应该清空。 依赖文件如下&#xff1a; <dependency><groupId>org.springframework.boot</groupId><arti…

2024国城杯 Web

这四道题目Jasper大佬都做了镜像可以直接拉取进行复现 https://jaspersec.top/2024/12/16/0x12%20%E5%9B%BD%E5%9F%8E%E6%9D%AF2024%20writeup%20with%20docker/ n0ob_un4er 这道题没有复现成功, 不知道为啥上传了文件, 也在 /tmp目录下生成了sess_PHPSESSID的文件, 但是就是…