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存放项目…

IJCNN2025 投稿准备

投稿格式要求&#xff1a; IEEE - Manuscript Templates for Conference Proceedings 投稿网址&#xff1a; Conference Management Toolkit - Login

多输入多输出 | 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&…

node.js之---子线程(child_process)模块

为什么需要子线程&#xff08;child_process&#xff09;模块 Worker Threads 的基本概念 如何使用 Worker Threads Worker Threads 的性能 Worker 线程的优势和限制 进阶用法&#xff1a;共享内存 为什么需要子线程&#xff08;child_process&#xff09;模块 在 Node.js…

【深度学习基础之多尺度特征提取】多尺度图像增强(Multi-Scale Image Augmentation)是如何在深度学习网络中提取多尺度特征的?附代码

【深度学习基础之多尺度特征提取】多尺度图像增强&#xff08;Multi-Scale Image Augmentation&#xff09;是如何在深度学习网络中提取多尺度特征的&#xff1f;附代码 【深度学习基础之多尺度特征提取】多尺度图像增强&#xff08;Multi-Scale Image Augmentation&#xff0…

鸿蒙应用开发 - 如何去掉字符串中空格

鸿蒙应用开发 - 如何去掉字符串中空格 在鸿蒙应用开发中&#xff0c;如果你使用的是ArkTS&#xff08;Ark TypeScript&#xff09;&#xff0c;可以通过JavaScript或TypeScript内置的字符串方法来去除字符串中的空格。以下是一些常用的方法&#xff1a; trim()&#xff1a;去…

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

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

vSAN手动平衡磁盘

原创作者&#xff1a;运维工程师 谢晋 vSAN手动平衡磁盘 vSAN手动平衡磁盘 vSAN手动平衡磁盘 1、ssh登录到VCSA&#xff0c;然后登录到 Ruby vSphere 控制台 (RVC) # rvc administratorvsphere.local10.10.0.202、切换到计算机命名空间 0 / 1 10.10.0.20/ > cd 1 /10.…

接口测试面试题

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

【前端,TypeScript】TypeScript速成(六):函数

函数 函数的定义 定义一个最简单的加法函数&#xff1a; function add(a: number, b: number): number {return a b }&#xff08;可以看到 JavaScript/TypeScript 的语法与 Golang 也非常的相似&#xff09; 调用该函数&#xff1a; console.log(add(2, 3)) // out [LOG…

css的选择器有哪些?优先级?

元素选择器&#xff1a;选择所有指定标签类型的元素。 类选择器&#xff1a;选择具有指定类的所有元素&#xff0c;类名前有一个点 ID 选择器&#xff1a;选择具有指定 id 属性的元素&#xff0c;ID 前有一个井号属性选择器&#xff1a;选择具有指定属性或属性值的元素后代选…

Vue-Router之嵌套路由

在路由配置中&#xff0c;配置children import Vue from vue import VueRouter from vue-routerVue.use(VueRouter)const router new VueRouter({mode: history,base: import.meta.env.BASE_URL,routes: [{path: /,redirect: /home},{path: /home,name: home,component: () &…

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;然后底层进行负载均衡。