C语言指针2.0

1. 指针语法解剖

  • 任意的指针,不管有多复杂,其定义都由两部分组成。
    • 第1部分:指针所指向的数据类型,可以是任意的类型
    • 第2部分:指针的名字

char   (*p1);            // 第2部分:*p1; 第1部分:char; 
char  *(*p2);            // 第2部分:*p2; 第1部分:char *; 
char **(*p3);            // 第2部分:*p3; 第1部分:char **; 
char   (*p4)[3];         // 第2部分:*p4; 第1部分:char [3]; 
char   (*p5)(int, char); // 第2部分:*p5; 第1部分:char (int, float); 
  • 注解:
  1. 上述示例中,p1、p2、p3、p4、p5本质上并无区别,它们均是指针
  2. 上述示例中,p1、p2、p3、p4、p5唯一的不同,是它们所指向的数据类型不同
  3. 第1部分的声明语句,如果由多个单词组成,C语言规定需要将其拆散写到第2部分的两边

char (*p1); 

表示 p1 是一个指向 char 类型的指针。

这意味着 p1 可以指向一个 char 类型的变量。

示例代码:

char c = 'A';  // 声明一个 char 类型的变量 c,并赋值为 'A'
char *p1;     // 声明一个指向 char 类型的指针 p1
p1 = &c;      // 将 p1 指向变量 c 的地址// 输出 p1 指向的字符
printf("p1 points to: %c\n", *p1);  // 输出:p1 points to: A

char *(*p2);

 表示 p2 是一个指向指向 char 类型的指针的指针。

这意味着 p2 可以指向一个 char* 类型的变量(字符串指针)。

示例代码:

char *str = "Hello";  // 声明并初始化一个字符串指针变量 str
char **p2;           // 声明一个指向指向 char 类型的指针的指针 p2
p2 = &str;           // 将 p2 指向字符串指针 str 的地址// 输出 p2 指向的字符串
printf("p2 points to: %s\n", *p2);  // 输出:p2 points to: Hello

char **(*p3);

表示 p3 是一个指向指向指向 char 类型的指针的指针的指针。

这意味着 p3 可以指向一个指向字符串指针的指针的变量。

示例代码:

char *strs[] = {"One", "Two", "Three"};  // 声明并初始化一个字符串指针数组 strs
char **p3;                              // 声明一个指向指向 char 类型的指针的指针的指针 p3
p3 = &strs;                             // 将 p3 指向字符串指针数组 strs 的地址// 输出 p3 指向的字符串指针
printf("p3 points to: %s\n", **p3);  // 输出:p3 points to: One// 输出 p3 指向的字符串指针数组中的每个字符串
for (int i = 0; i < 3; i++) {printf("Element %d: %s\n", i, *(*p3 + i));
}
// 遍历输出结果
Element 0: One
Element 1: Two
Element 2: Three

char (*p4)[3]; 

表示 p4 是一个指向长度为3的 char 数组的指针。

这意味着 p4 可以指向一个长度为3的 char 数组。

示例代码:

char arr[] = {'A', 'B', 'C'};  // 声明并初始化一个长度为3的 char 数组 arr
char (*p4)[3];                 // 声明一个指向长度为3的 char 数组的指针 p4
p4 = &arr;                     // 将 p4 指向数组 arr 的地址// 通过 p4 解引用输出数组元素
for (int i = 0; i < 3; i++) {printf("%c ", (*p4)[i]);
}//输出结果
A B C

char (*p5)(int, char);

 表示 p5 是一个指向函数的指针,这个函数接受一个 int 类型和一个 char 类型的参数,并返回 char 类型的值。

这意味着 p5 可以指向具有特定参数和返回类型的函数。

示例代码:

char myFunction(int num, char ch) {// 实现函数功能的代码return ch + num;
}char (*p5)(int, char);  // 声明一个指向函数的指针 p5
p5 = &myFunction;      // 将 p5 指向函数 myFunction// 调用通过 p5 指向的函数
char result = (*p5)(3, 'A');
printf("Result: %c\n", result);//输出结果
Result: D

 

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

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

相关文章

图像的重要属性

图像还具有以下重要属性&#xff1a; 旋转不变性&#xff08;rotation invariance&#xff09;&#xff1a; 图像在发生旋转后&#xff0c;其重要特征和对象仍然能够被识别。 尺度不变性&#xff08;Scale Invariance&#xff09;&#xff1a; 图像在缩放或尺度变化后&#xf…

分享76个时间日期JS特效,总有一款适合您

分享76个时间日期JS特效&#xff0c;总有一款适合您 76个时间日期JS特效下载链接&#xff1a;https://pan.baidu.com/s/1s7tPGT_ItK7dNK5_qbZkug?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;…

单片机——FLASH(2)

文章目录 flash &#xff08;stm32f40x 41x的内存映射中区域详解&#xff09;flash写数据时 flash &#xff08;stm32f40x 41x的内存映射中区域详解&#xff09; Main memory 主存储区 放置代码和常数 System memory 系统存储区 方式bootloader代码 OTP区 一次性可编程区 选项…

解决Typora导出HTML不显示图片

解决Typora导出HTML不显示图片 产生原因 Typora导出HTML不显示图片&#xff0c;可能时图片存放在我们的硬盘中。 我们可以将markdown中的图片转化为base64格式&#xff0c;嵌入到html中。 解决步骤 首先&#xff0c;下载 TyporaToBase64.jar 密码:45jq 其次&#xff0c;将…

Netty应用(五) 之 Netty引入 EventLoop

目录 第三章 Netty 1.什么是Netty&#xff1f; 2.为什么需要使用Netty&#xff1f; 3.Netty的发展历程 4.谁在使用Netty&#xff1f; 5.为什么上述这些分布式产品都使用Netty&#xff1f; 6.第一个Netty应用 7.如何理解Netty是NIO的封装 8.logback日志使用的加强 9.Ev…

无人机飞行原理,多旋翼无人机飞行原理详解

多旋翼无人机升空飞行的首要条件是动力&#xff0c;有了动力才能驱动旋粪旋转&#xff0c;才能产生克服重力所必需的升力。使旋翼产生升力&#xff0c;进而推动多旋翼无人机升空飞行的一套设备装置称为动力装置&#xff0c;包括多旋翼无人机的发动机以及保证发动机正常工作所必…

知识价值2-什么是IDE?新手用哪个IDE比较好?

IDE是集成开发环境&#xff08;Integrated Development Environment&#xff09;的缩写&#xff0c;是一种软件应用程序&#xff0c;旨在提供集成的工具集&#xff0c;以方便开发人员进行软件开发。IDE通常包括代码编辑器、编译器、调试器和其他工具&#xff0c;以支持软件开发…

Android java基础_类的继承

一.Android Java基础_类的继承 先封装一个persion类&#xff0c;在persion的基础上定义Student类&#xff0c;并基础persion类。 子类能访问父类的成员函数。 class Person {private int age;public void setAge(int age) {if (age < 0 || age > 200)age 0;else {thi…

【深度优先搜索】【树】【图论】2973. 树中每个节点放置的金币数目

作者推荐 视频算法专题 本博文涉及知识点 深度优先搜索 树 图论 分类讨论 LeetCode2973. 树中每个节点放置的金币数目 给你一棵 n 个节点的 无向 树&#xff0c;节点编号为 0 到 n - 1 &#xff0c;树的根节点在节点 0 处。同时给你一个长度为 n - 1 的二维整数数组 edges…

C++2024寒假J312实战班2.5

题目列表&#xff1a; #1多项式输出 #2龙虎斗 #3表达式求值 #4解密 #1多项式输出 这是第一个题目很简单&#xff0c;我也作对了。 我们下来看一下题目&#xff1a; 我们先来看一下样例&#xff1a; 5 100 -1 1 -3 0 10 首先100是第一项&#xff0c;所以不输出加号&…

【单片机】简单的自定义延时程序设计(代码演示)

前言 大家好吖&#xff0c;欢迎来到 YY 滴 单片机系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY…

突破编程_C++_面试(基础知识(11))

面试题34&#xff1a;什么是继承&#xff0c;它有哪些类型 继承是面向对象编程的一个基本概念&#xff0c;它允许一个类&#xff08;派生类、子类&#xff09;继承另一个类&#xff08;基类、父类&#xff09;的属性和方法。继承可以减少代码冗余&#xff0c;提高代码重用性&a…

【个人笔记】计算机网络五层结构理解

#纯属个人笔记 作为学习记录用途 #较多个人比较好理解的说法 可能不太准确 若发现错误 欢迎评论区指正 不希望误导小白 详细的概念请以书本的定义为准 目录 正片 传统的五层结构 如下&#xff1a; 物理层&#xff08;Physical Layer&#xff09;&#xff1a; 负责传输比特流…

C#阿里云消息列队推送消息

推送消息到队列 IMNS nativeclient new Aliyun.MNS.MNSClient(accessKeyId, accessKeySecret, endpoint, _stsToken);var nativeSend nativeclient.GetNativeTopic("SMQ");nativeSend.PublishMessage("推送消息内容"); 需要引用Aliyun.MNS.dll 下载地址…

【Linux】信号保存与信号捕捉处理

信号保存与信号捕捉 一、信号保存1. 信号的发送2. 理解信号保存&#xff08;1&#xff09;信号保存原因&#xff08;2&#xff09;信号保存概念 3. 信号保存系统接口&#xff08;1&#xff09;sigset_t&#xff08;2&#xff09;sigprocmask()&#xff08;3&#xff09;sigpend…

论文阅读-GROUP:一种聚焦于工作负载组行为的端到端多步预测方法

摘要 准确地预测工作负载可以使网络服务提供商实现应用程序的主动运行管理&#xff0c;确保服务质量和成本效益。对于云原生应用程序来说&#xff0c;多个容器协同处理用户请求&#xff0c;导致每个容器的工作负载变化受到工作负载组行为的影响。然而&#xff0c;现有方法主要…

代码随想录算法训练营第三十四天丨16.1 活动选择、877. 石子游戏

16.1 活动选择 最优子结构 活动选择问题的最优子结构意味着问题的最优解包含了其子问题的最优解。具体来说&#xff0c;如果我们有一个按结束时间排序的活动集合 S{a1​,a2​,...,an​}&#xff0c;并且 S’ 是 S 的最大兼容活动子集&#xff0c;那么对于 S′ 中的任何活动aj…

Hyper-V 调整 设置 Ubuntu 虚拟机的分辨率

使用win10 的hyper-v安装 ubuntu20&#xff0c; 在ubuntu内无法调整display settings。可以使用以下方法 解决&#xff1a; 1.修改ubuntu系统中的grub文件&#xff1b; 使用命令行&#xff1a; sudo vi /etc/default/grub 找到GRUB_CMDLINE_LINUX_DEFAULT这一行&#xff0c;…

JAVA基本内容(数据类型、标识符、数组、注释、关键字)

目录 基本数据类型 取值范围大小 情景一&#xff1a; 情景二&#xff1a; 情景三&#xff1a; 情景四&#xff1a; 标识符 情景一&#xff1a; 情景二&#xff1a; 情景三&#xff1a; 数组 一维数组 二维数组 多维数组 注释 单行注释 多行注释 文档注释 关键字 基本数据类…

【Android】使用Termux终端搭建本地web服务器

在Android手机上有一个Termux APP&#xff0c;可运行类似 Linux 终端的模拟器&#xff0c;可以运行Nodejs&#xff0c;正好用它运行本地站点&#xff0c;用不着去租服务器&#xff0c;相比运行在电脑上&#xff0c;节省了电费&#xff0c;想要学来用的话不妨看看这篇文章。 文章…