C语言指针进阶

文章目录

  • 1.字符指针
    • 1.1字符
    • 1.2字符串
  • 2.数组指针
    • 2.2数组名和&数组名
    • 2.3数组指针的使用
      • 2.3.1一维数组例子
      • 2.3.2 二维数组传参
        • 2.3.2.1参数是数组的形式
        • 2.3.2.2参数是指针的形式
  • 3.指针数组
  • 4.数组传参和指针传参
    • 4.1 一维数组传参
      • 4.1.1参数为数组的形式,参数为指针的形式
    • 4.2 二维数组传参
      • 4.2.1参数为数组的形式
      • 4.2.2参数为指针
    • 4.3一级指针传参
    • 4.4二级指针传参
  • 5.函数指针
    • typedef函数指针
  • 6.函数指针数组
  • 7.指向函数指针数组的指针
  • 8.回调函数
  • 9.指针和数组面试题
    • 9.1 sizeof
    • 9.2strlen,求字符串的长度,遇到'\0'才结束,strlen的参数是地址,给我一个位置,从这个位置开始向后找'\0'
    • 9.3笔试
  • 10.编程练习
    • 10.1 字符串逆序,gets
    • 10.2结构体
    • 10.3喝汽水
    • 10.4选择
      • 10.4.1strcat(str1,str2)把str2追加到str1后面.头文件string.h
      • strstr找子串strstr(str1,str2)在str1里找一找有没有str2这个子串,返回char*,找到返回子串首字符地址,找不到返回空指针。头文件string.h

在这里插入图片描述

1.字符指针

1.1字符

在这里插入图片描述

1.2字符串

在这里插入图片描述

把常量字符串赋给p,其实是把首字符的地址赋给了p,不是把字符串的地址赋给p,而是把首字符的地址赋给p,不是把字符串放到了p里面

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

C++不可以这样写,需要写成
在这里插入图片描述

常量字符串不可以更改

在这里插入图片描述

所以C里面最准确的写法是加const

在这里插入图片描述

练习题

在这里插入图片描述

在这里插入图片描述
准确一点的写法
在这里插入图片描述

2.数组指针

数组指针是指针,存放数组的地址,指向数组的指针

在这里插入图片描述
int[10]是数组的类型
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
pa是一个指针,指向一个数组,这个数组有5个元素,数组每个元素是char*
在这里插入图片描述

2.2数组名和&数组名

![!](https://img-blog.csdnimg.cn/0c723cc8983f44b285e8aa848313198d.png)

在这里插入图片描述
在这里插入图片描述
B0=1116=176 D8=1316+8=216 216-176=40
在这里插入图片描述

2.3数组指针的使用

2.3.1一维数组例子

在这里插入图片描述

在这里插入图片描述
第二个写法
在这里插入图片描述

2.3.2 二维数组传参

2.3.2.1参数是数组的形式

在这里插入图片描述
在这里插入图片描述

2.3.2.2参数是指针的形式

在这里插入图片描述

在这里插入图片描述

//*(p+i)相当于arr[i]
void print(int(*p)[5], int x, int y) {
	for (int i = 0; i < x; i++) {
		for (int j = 0; j < y; j++) {
			printf("%d ", (*(p + i))[j]);
		}
		printf("\n");
	}
}
void print1(int(*p)[5], int x, int y) {
	for (int i = 0; i < x; i++) {
		for (int j = 0; j < y; j++) {
			printf("%d ", p[i][j]);
		}
		printf("\n");
	}
}
int main(int argc, char const*argv[])
{
	int arr[3][5] = { {1,2,3,4,5}, {2, 3, 4, 5, 6},
		{3, 4, 5, 6, 7} };
	print(arr, 3, 5);
	print1(arr, 3, 5);
	system("pause");
	return 0;
}

在这里插入图片描述

parr3和*和[]都可以结合,[]优先级高,所以和[]结合
在这里插入图片描述

在这里插入图片描述

3.指针数组

指针数组是 数组 用来存放指针的

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
第二种写法
在这里插入图片描述

在这里插入图片描述

4.数组传参和指针传参

4.1 一维数组传参

4.1.1参数为数组的形式,参数为指针的形式

在这里插入图片描述

4.2 二维数组传参

4.2.1参数为数组的形式

在这里插入图片描述

在这里插入图片描述

4.2.2参数为指针

在这里插入图片描述

4.3一级指针传参

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.4二级指针传参

在这里插入图片描述

在这里插入图片描述

5.函数指针

函数指针,是指针,存放函数地址的指针。指向函数的指针

在这里插入图片描述
在这里插入图片描述
形参的名字可写可不写
在这里插入图片描述
*pa就是函数名
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

typedef函数指针

在这里插入图片描述
在这里插入图片描述

6.函数指针数组

函数指针数组,存放函数指针的数组

在这里插入图片描述

在这里插入图片描述

7.指向函数指针数组的指针

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.回调函数

通过函数指针调用的函数

在这里插入图片描述
在这里插入图片描述

print就是回调函数

在这里插入图片描述

9.指针和数组面试题

9.1 sizeof

一维数组
sizeof(数组名),&数组名,除此之外,数组名都是首元素的地址
在这里插入图片描述

在这里插入图片描述

字符数组
在这里插入图片描述
字符串

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

二维数组

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

9.2strlen,求字符串的长度,遇到’\0’才结束,strlen的参数是地址,给我一个位置,从这个位置开始向后找’\0’

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
&p得到char**二级指针,二级指针,指向地址,指向4/8个字节,这个系统的指针占4个字节,所以&p+1就向后移四个字节
在这里插入图片描述
在这里插入图片描述

9.3笔试

指针强制类型转换

在这里插入图片描述

指针±整数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

内存中,最小的内存单位是字节,每个字节都给一个地址

在这里插入图片描述

逗号表达式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

字符串

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

10.编程练习

10.1 字符串逆序,gets

在这里插入图片描述
scanf时输入的字符串不能有空格https://blog.csdn.net/qq_37891604/article/details/133465232
在这里插入图片描述
如果想输入hello world可以使用gets
在这里插入图片描述

在这里插入图片描述

10.2结构体

在这里插入图片描述

10.3喝汽水

作业讲解2
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

10.4选择

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

旋转字符串

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

三步反转法

在这里插入图片描述
在这里插入图片描述

判断一个字符串是否是另一个字符串反转的结果
常量字符串不让修改,需要改成数组的形式

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.4.1strcat(str1,str2)把str2追加到str1后面.头文件string.h

在这里插入图片描述

自己给自己追加不能使用strcat

在这里插入图片描述

找到str1的\0,然后把str2字符一个一个放过去,直到遇到\0停止,\0也放过去

在这里插入图片描述

strncat
在这里插入图片描述
在这里插入图片描述

strstr找子串strstr(str1,str2)在str1里找一找有没有str2这个子串,返回char*,找到返回子串首字符地址,找不到返回空指针。头文件string.h

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

windows系统用于 SDN 的软件负载均衡器 (SLB)

适用于&#xff1a;Azure Stack HCI 版本 22H2 和 21H2&#xff1b;Windows Server 2022、Windows Server 2019、Windows Server 2016 软件负载均衡器包括哪些内容&#xff1f; 软件负载均衡器提供以下功能&#xff1a; 适用于北/南和东/西 TCP/UDP 流量的第 4 层 (L4) 负载均…

制造企业使用设备健康管理平台的好处

智能科技的发展不仅改变了我们的日常生活&#xff0c;也给工业制造领域带来了巨大的变化。在制造业生产线上&#xff0c;每天都在使用各种不同的机器设备来生产我们日常使用的物品。然而&#xff0c;这些设备的维护、维修和状态监测成为了制造企业的一大挑战。随着科技的发展&a…

java学习part02一些特性

17-Java语言概述-Java语言的特点和JVM的功能_哔哩哔哩_bilibili 1.java优点 跨平台性 在jvm上运行 2.jvm 2.1实现跨平台性 不需要对每一种指令集编写编译器&#xff0c;只需要针对jvm编程&#xff0c;jvm会自动转换 2.2内存回收 内存溢出&#xff1a;用的内存太多已经占满了&…

机器视觉系统的组成

图像获取 光学系统采集图像&#xff0c;图像转换成模拟格式并传入计算机存储器。 图像处理和分析 处理器运用不同的算法来提高对结论有重要影响的图像要素并形成数据作为判决依据。 判决和输出 处理器的控制程序根据收到的数据做出结论并输出信息作反馈控制等应用。

初认识vue,v-for,v-if,v-bind,v-model,v-html等指令

vue 一.vue3介绍 1.为什么data是函数而不是对象? 因为vue是组件开发,组件会多次复用,data如果是对象,多次复用是共享,必须函数返回一个新的对象 1. 官网初识 Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS …

11.10 知识总结(数据的增删改查、如何创建表关系、Django框架的请求生命周期流程图)

一、 数据的增删改查 1.1 用户列表的展示 把数据表中得用户数据都给查询出来展示在页面上 添加数据 id username password gender age action 修改 删除 1.2 修…

VB.NET三层之用户查询窗体

目录 前言: 过程: UI层代码展示: BLL层代码展示: DAL层代码展示: 查询用户效果图:​ 总结: 前言: 想要对用户进行查询&#xff0c;需要用到控件DataGrideView&#xff0c;通过代码的形式将数据库表中的数据显示在DataGrideview控件中&#xff0c;不用对DatGridView控件…

WordPress 文档主题模板Red Line -v0.2.2

此主题作为框架&#xff0c;做承载第三方页面之用&#xff0c;例如飞书文档等&#xff0c; 您可以将视频图片等资源放第三方文档上&#xff0c;通过使用此主题做目录用。 此主题使用前后端分离开发&#xff0c;也使用了一些技术尽量不影响正常的SEO&#xff0c;还望注意。 源码…

DevEco Studio开发工具下载、安装(HarmonyOS开发)_For Mac

一、说明 初学HarmonyOS开发&#xff0c;DevEco Studio开发工具的安装和使用是必须的。 &#xff08;注&#xff1a;不多废话&#xff0c;跟着下面流程操作下载、安装DevEco Studio即可。&#xff09; 二、下载DevEco Studio 1.官网下载地址&#xff1a; https://developer.…

什么是状态机?

什么是状态机&#xff1f; 定义 我们先来给出状态机的基本定义。一句话&#xff1a; 状态机是有限状态自动机的简称&#xff0c;是现实事物运行规则抽象而成的一个数学模型。 先来解释什么是“状态”&#xff08; State &#xff09;。现实事物是有不同状态的&#xff0c;例…

Linux高级编程:IPC之管道

一、无名管道 1.1 无名管道的概述 管道(pipe)又称无名管道。 无名管道是一种特殊类型的文件&#xff0c;在应用层体现为两个打开的文件描述符。 任何一个进程在创建的时候&#xff0c;系统都会 给他分配4G的虚拟内存&#xff0c;分为3G的用户空间和1G 的内核空间&#xff0c;内…

wpf devexpress项目中添加GridControl绑定数据

本教程讲解了如何添加GridControl到wpf项目中并且绑定数据 原文地址Lesson 1 - Add a GridControl to a Project and Bind it to Data | WPF Controls | DevExpress Documentation 1、使用 DevExpress Template Gallery创建一个新的空白mvvm应用程序&#xff0c;这个项目包括了…

P6入门:项目初始化9-项目详情之资源 Resource

前言 使用项目详细信息查看和编辑有关所选项目的详细信息&#xff0c;在项目创建完成后&#xff0c;初始化项目是一项非常重要的工作&#xff0c;涉及需要设置的内容包括项目名&#xff0c;ID,责任人&#xff0c;日历&#xff0c;预算&#xff0c;资金&#xff0c;分类码等等&…

DRAM和SRAM

特点 Static Random Access Memory&#xff1a;速度快、存储一位需要元器件更多、功耗较大、集成度低、更贵 Dynamic Random Access Memory&#xff1a;容量大、需刷新、附属电路更复杂、功耗较小、集成度高 存储位元 SRAM DRAM 逻辑结构 SRAM 典型的SRAM芯片有6116&am…

RHCE第四次作业

题目 架设一台NFS服务器&#xff0c;并按照以下要求配置 1、开放/nfs/shared目录&#xff0c;供所有用户查询资料 2、开放/nfs/upload目录&#xff0c;为192.168.100.0/24网段主机可以上传目录&#xff0c; 并将所有用户及所属的组映射为nfs-upload,其UID和GID均为210 3、将…

算法笔记-第七章-队列

算法笔记-第七章-队列 队列的相关知识点c中队列queue用法队列的操作序列求和队列约瑟夫环-队列匹配队列 队列的相关知识点 大佬的讲解 c中队列queue用法 一&#xff1a;queue是一种容器转换器模板&#xff0c;调用#include< queue>即可使用队列类 二&#xff1a;使用q…

TDengine 与煤科院五大系统实现兼容性互认,助力煤矿智能化安全体系搭建

近日&#xff0c;涛思数据与煤炭科学技术研究院&#xff08;以下简称煤科院&#xff09;已完成数个产品兼容互认证工作&#xff0c;经双方共同严格测试&#xff0c;涛思数据旗下物联网、工业大数据平台 TDengine V3.X 与煤炭科学技术研究院旗下煤矿复合灾害监测监控预警系统、煤…

超越任务调度的极致:初探分布式定时任务 XXL-JOB 分片广播

XXL-JOB 是一个分布式任务调度平台&#xff0c;支持分片任务执行。 1. 依赖引入 在项目中引入 XXL-JOB 的相关依赖。通常&#xff0c;你需要在项目的 pom.xml 文件中添加如下依赖&#xff1a; <dependency><groupId>com.xuxueli</groupId><artifactId&…

线圈寿命预测 数据集讲解

来自-郭师兄 1.这个是线圈数据的阻抗、电抗等数据&#xff0c;我想根据这个个数据进行线圈寿命预测也就是RUL预测&#xff0c;请问有什么思路吗。 最简单的思路&#xff1a; 数据通过某种方法进行压缩表征到一维再通过 同时需要标签。 确定一个特征 使用降维方法如同PCA来构…

达梦数据库安装

一、官网参考文档 达梦数据库官网&#xff1a;https://www.dameng.com/ &#xff0c;参考文档如下&#xff1a; 最后的文档地址为&#xff1a;Docker安装 | 达梦技术文档 二、dcoker安装 docker基本按照官网来就行&#xff0c;点击相应的链接下载镜像包。 复制到linux中&#x…