c/c++概念辨析-指针常量常量指针、指针函数函数指针、指针数组数组指针

概念澄清: 

统一规则:

        不管是XX指针,还是指针XX,后者是本体,前者只是个定语,前者也可以替换为其他同类(例如字符串),帮助理解。

XX指针:

        可简单理解为,XX类型的指针,也可理解为指向XX的指针。

常量指针:指向常量内容的指针;

数组指针:指向数组的指针。

函数指针:指向函数的指针。

指针XX:

        后者是本体,是侧重点。

指针常量:指针本身是个常量,(类比 字符串常量);

指针数组:指针本身作为数组元素,(类比 字符串数组);

指针函数:一个返回值是指针的函数。【吐槽:发明这个概念感觉挺多余的,给人制造混淆】

实战:

常量指针与指针常量
记忆:

忽略int,看const右侧紧跟着的是指针p还是常内容 *p, 是指针,那就侧重点在描述指针值不可变,可类比 “字符串常量”,即为 指针常量;是常内容*p,那就是侧重点描述指向内存内容不可变,记忆时可以把*p 替换为常内容,那就是常量(内容)指针)

练习:

int const* p;    //const修饰的是*p,常量指针;
const int* p;    //const修饰的是*p,常量指针;
int* const p;    //const修饰的是p,指针常量;

函数指针与指针函数
函数指针:一个指向函数的指针

这种指针的定义方法为:返回类型 (*指针变量名)(参数列表)。

ret (*p)(args, ...);

这种指针的初始化方法很简单,为:

函数指针变量 =  函数名;

下面是一个简单的例子:

#include <iostream>
using namespace std;int add(int a, int b) {return a + b;
}int main() {int (*p)(int, int); // 定义函数指针p = add; // 指向函数int sum = (*p)(1, 2); // 调用函数cout << sum << endl; // 输出:3return 0;
}

         在上面的例子中,我们定义了一个函数指针p,它指向一个参数为两个int类型的函数,并返回一个int类型的值。然后我们将它指向了add函数,并通过*p调用了add函数,将1和2作为参数传递给了add函数,最后输出了add函数的返回值3。

指针函数:一个返回值是指针的函数(举例忽略)。

指针数组与数组指针
指针数组:以指针为元素的数组(本体)

定义格式:

数据类型 *首地址[];

如下,是一个  以 int型指针为元素的数组

int *arry[10];

数组指针:指向数组的指针(本体)

   数组指针是指向数组的指针,它可以像数组名一样访问数组元素。在C/C++中,数组指针的定义方式为:指针变量名加上一对圆括号,再加上数组名。

例如:

int (*p)[n];是数组指针,它指向二维数组中的时候,n为每个一维数组的长度,即列宽。

数组指针指向一维数组例子:

int arr[5] = {1, 2, 3, 4, 5};int(*p)[5] = &arr;

 数组指针指向二维数组例子:

        数组指针又称为行指针,它指向的是一个数组,对于一个二维数组,它指向的就是一行行一维数组。这个指针p在指向一个二维数组的时候,每P+1就跳过 一维行数组的长度 直接指向下一行。 

以下是一个C++数组指针指向二维数组的例子:

#include <iostream>
using namespace std;int main() {int arr[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};int (*p)[4] = arr; // 定义一个指向含4个元素的一维数组的指针,将二维数组的首地址赋给pfor(int i=0; i<3; i++) {for(int j=0; j<4; j++) {cout << p[i][j] << " "; // 通过指针访问二维数组元素}cout << endl;}return 0;
}

输出结果为:

1 2 3 4 
5 6 7 8 
9 10 11 12

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

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

相关文章

Image Segmentation Using Deep Learning: A Survey

论文标题&#xff1a;Image Segmentation Using Deep Learning:A Survey作者&#xff1a;发表日期&#xff1a;阅读日期 &#xff1a;研究背景&#xff1a;scene understanding,medical image analysis, robotic perception, video surveillance, augmented reality, and image…

安卓+charles实现抓包(主要解决证书网站无法打开问题)

安装 官网下载 https://www.charlesproxy.com/latest-release/download.do 使用介绍 Charles介绍 上面链接看一至三即可 初步代理配置 如何获取代理服务器IP和手机端IP 代理服务器IP 点击help&#xff0c;选中ssl 代理&#xff0c;点击在移动设备或远程浏览器上安装Cha…

如何练好太极拳?

太极拳是一种需要细心和耐心的武术&#xff0c;要练好太极拳&#xff0c;需要从以下几个方面入手&#xff1a; 找到好的师傅&#xff1a;找到一位经验丰富、技艺高超的师傅是学习太极拳的关键。师傅应该具备正确的太极拳理论、技术和经验&#xff0c;能够正确地指导学生学习太极…

M1安装RabbitMQ

1.查看centos内核版本 uname -a uname -r2.安装之前的准备工作 安装RabbitMQ必装Erlang(RabbitMQ官网添加链接描述) 2.1.Erlang简介 Erlang是一种通用的面向并发的编程语言&#xff0c;它由瑞典电信设备制造商爱立信所辖的CS-Lab开发&#xff0c;目的是创造一种可以应对…

漏洞复现--安恒明御安全网关 aaa_local_web_preview 任意文件上传

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

爬虫学习 逆向爬虫(六)

多任务异步协程 协程:更高效的利用CPU import timedef func():print("黎明")time.sleep(3)print("还是黎明")func() 等待时机长 sleep时CPU不再工作 IO操作(费时不费力)->阻塞 线程运行阻塞后 移出主线程 移动到下一个 4个任务一个线程 …

一套后台管理系统的入门级的增删改查(vue3组合式api+elemment-plus)

一、页面示意&#xff1a; 图一 图二 二、组件结构 列表组件 &#xff1a;index.vue,对应图一添加组件&#xff1a;add.vue&#xff0c;对应图二&#xff0c;用抽屉效果编辑组件&#xff1a;edit.vue&#xff0c;和添加组件的效果一个。 三、代码 1、列表组件: index.vue …

我在Vscode学OpenCV 图像处理一(阈值处理、形态学操作【连通性,腐蚀和膨胀,开闭运算,礼帽和黑帽,内核】)

文章目录 一、阈值处理1.1 OpenCV 提供了函数 cv2.threshold()和函数 cv2.adaptiveThreshold()&#xff0c;用于实现阈值处理1.1.1. cv2.threshold()&#xff1a;(1)在函数cv2.threshold()中&#xff0c;参数threshold_type用于指定阈值处理的方式。它有以下几种可选的阈值类型…

哈希桶——开放定址法

哈希表的迭代器&#xff1a; 迭代器模板介绍&#xff1a; template<class K, class T, class Ref, class Ptr, class KeyOfT, class Hash> K:关键词类型 T:存储的数据类型 Ref:T& &#xff08;operator*() 解引用函数的返回类型&#xff09; Ptr:T* (oper…

CDA level-2 备考经验分享 转数据分析师CDA证书备考 考试相关说明

抓住了23年的尾巴&#xff0c;正好给我考过了CDA level-2 &#xff0c;虽然今年只有这几个小收获&#xff0c;但是还是很开心了&#xff0c;毕竟知足常乐嘛。 由于工作原因&#xff0c;因此复习都是间断性的&#xff0c;勉勉强强给通过了&#xff0c;只得了个C。 考试注册报名与…

台灯到底对眼睛好不好?推荐高品质的护眼台灯

其实只要我们挑选一盏专业的台灯&#xff0c;并且正确的使用&#xff0c;那么台灯对眼睛是有很大的好处的&#xff01;如今夜间工作、学习已然成为了再常见不过的事情&#xff0c;在夜间最大的痛点就是光照不足&#xff0c;如果单靠室内灯是远远不足的&#xff0c;而且光线的分…

基于Springboot的房产销售系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的房产销售系统(有报告)。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring Sp…

次世代建模纹理贴图怎么做?

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 1、什么是次时代建模&#xff1f; "次世代建模"是一个术语&#xff0c;通常用来描述…

Linux--2.6内核调度和环境变量

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、Linxu2.6内核进程调度队列1、一个CPU拥有一个runqueue2、优先级3、优先级活动队列4、过期…

VC++调试QT源码

环境&#xff1a;vs2017 qt 5.14.2 1&#xff1a;首先我们需要选择我们的源码路径 右键解决方案-》属性-》通用属性-》调试源文件-》在窗口内添加QT下载时的源码**.src文件夹**&#xff0c;这里最好把源码 D:\software\QT\path\5.14.2\Src 源文件里面的Src文件做一个备份出来…

Android UiAutoMatorViewer打不开

UIAutoMatorViewer是个很好用的工具&#xff0c;能解析出任意手机页面的UI树&#xff0c;非常方便。 工具位置&#xff1a;SDK\tools\bin\uiautomatorviewer.bat 一般双击就能打开。 但有时会打不开&#xff0c;双击后无反应&#xff0c;在cmd窗口中运行也是如此。 这种情况…

【Linux】第二十三站:缓冲区

文章目录 一、一些奇怪的现象二、用户级缓冲区三、用户级缓冲区刷新问题四、一些其他问题1.缓冲区刷新的时机2.为什么要有这个缓冲区3.这个缓冲区在哪里&#xff1f;4.这个FILE对象属于用户呢&#xff1f;还是操作系统呢&#xff1f;这个缓冲区&#xff0c;是不是用户级的缓冲区…

Python基础语法之学习占位符

Python基础语法之学习占位符 一、代码二、效果 一、代码 name "张三" sex "男" age 10 money 12.5# 通过占位符完成拼接 print("姓名&#xff1a;%s" % name) print("姓名&#xff1a;%s,性别&#xff1a;%s" % (name, sex))text…

6.16二叉搜索树中的搜索(LC700-E)

算法&#xff1a; 二叉搜索树自带顺序&#xff0c;所以不用强调前、中、后序。 调试过程&#xff1a; 原因&#xff1a;初始化变量result时&#xff0c;没有给result赋值 正确代码&#xff1a; /*** Definition for a binary tree node.* public class TreeNode {* int…

『C++成长记』构造函数和析构函数

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;C &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、类的六个个默认成员函数 &#x1f4d2;1.1认识默认成员函数 二、构造函数 …