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.hqwc.cn/news/464534.html

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

相关文章

【从Python基础到深度学习】1. Python PyCharm安装及激活

前言&#xff1a; 为了帮助大家快速入门机器学习-深度学习&#xff0c;从今天起我将用100天的时间将大学本科期间的所学所想分享给大家&#xff0c;和大家共同进步。【从Python基础到深度学习】系列博客中我将从python基础开始通过知识和代码实践结合的方式进行知识的分享和记…

【软件使用】【edge】如何让edge的某个网页作为应用安装

【背景】 有些常用网页希望用双击快捷方式的形式打开更加效率&#xff0c;我的浏览器主要是edge&#xff0c;研究了两种方法来实现这个需求。 【Edge自带方法】 点击Edge的右上角三点水-》应用-》将此站点作为应用安装。 点击安装&#xff0c;可以选择是否加到开始屏幕等。 …

[NSSCTF]-Web:[SWPUCTF 2021 新生赛]easy_sql解析

查看网页 有提示&#xff0c;参数是wllm&#xff0c;并且要我们输入点东西 所以&#xff0c;我们尝试以get方式传入 有回显&#xff0c;但似乎没啥用 从上图看应该是字符型漏洞&#xff0c;单引号字符注入 先查看字段数 /?wllm2order by 3-- 没回显 报错了&#xff0c;说明…

【算法】排序详解(快速排序,堆排序,归并排序,插入排序,希尔排序,选择排序,冒泡排序)

目录 排序的概念&#xff1a; 排序算法的实现&#xff1a; 插入排序&#xff1a; 希尔排序&#xff1a; 选择排序&#xff1a; 堆排序&#xff1a; 冒泡排序&#xff1a; 快速排序&#xff1a; 快速排序的基本框架&#xff1a; 1.Hoare法 2. 挖坑法 3.前后指针法 快…

假期day7

设计qq界面 代码 ui->lab1->setPixmap(QPixmap(":/pictrue/denglu.webp"));ui->lab1->setScaledContents(true);ui->lab2->setPixmap(QPixmap(":/pictrue/passwd.jpg"));ui->lab2->setScaledContents(true);ui->lab3->setP…

Docker容器输入汉字触发自动补全

一、描述 输入汉字自动触发补全&#xff1a; Display all 952 possibilities? (y or n)是因为容器中没有中文字符集和中文字体导致的&#xff0c;安装中文字体&#xff0c;并设置字符集即可。 二、解决 1、安装字符集 &#xff08;1&#xff09;查看系统支持的字符集 lo…

Ubuntu下anaconda的常用操作

Ubuntu下anaconda的安装及常用操作 安装Anaconda 下载Anaconda&#xff1a;在Anaconda官网下载适合你系统的Anaconda安装包&#xff08;通常是64位的Linux版本&#xff09;。 安装Anaconda 在终端中导航到你下载Anaconda安装包的目录&#xff0c;然后运行以下命令安装Anacon…

蓝桥云课-2024-第5场入门赛

参赛地址&#xff1a; 第 5 场 小白入门赛 - 蓝桥云课 (lanqiao.cn) 题目列表&#xff1a; 第一题&#xff1a;是签到题&#xff0c;就不需要解释了 第二题&#xff1a;欢迎参加福建省大学生程序设计竞赛&#xff08;题目&#xff09; 主要思路&#xff1a; 就是分类&#…

Leecode之反转链表

一.题目及剖析 https://leetcode.cn/problems/reverse-linked-list/description/ 二.思路引入 设定三个指针,n1指向空, n2指向head,n3指向下一个元素,将n2->next指向n1,然后三个指针向后遍历重复即可 三.代码引入 /*** Definition for singly-linked list.* struct List…

KMP算法|next指针|详细讲解学习

KMP 算法介绍 KMP 算法是基于串的朴素模式匹配算法优化的。 串的朴素模式匹配算法是将主串中所有的与模式串长度相等的子串与模式串进行比较&#xff0c;如果模式串与进行比较的的子串相等&#xff0c;就匹配成功&#xff0c;否则匹配失败。 在 KMP 算法的理解的基础上&#x…

【Rust】——猜数游戏

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

vtk三维场景基本要素 灯光、相机、颜色、纹理映射 简介

整理一下VTK 三维场景基本要素&#xff0c;后面会一一进行整理&#xff1b; 1. 灯光 vtkLight 剧场里有各式各样的灯光&#xff0c;三维渲染场景中也一样&#xff0c;可以有多个灯光存在。灯光和相机 是三维渲染场景必备的要素&#xff0c;vtkRenderer会自动创建默认的灯光和…