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

news2025/1/10 1:31:15

概念澄清: 

统一规则:

        不管是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; // 输出:3
    return 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;

    for(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.coloradmin.cn/o/1275180.html

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

相关文章

骨传导耳机是智商税吗?骨传导耳机是利用什么原理听歌?

骨传导耳机并非智商税&#xff0c;而是一种新兴的技术产品。作为是一种新型的听音设备&#xff0c;它采用了与传统耳机不同的工作原理&#xff0c;通过将声音通过骨骼传导到内耳&#xff0c;实现了不用堵塞耳道就能听到声音的效果。相比传统耳机&#xff0c;骨传导耳机具有一些…

mac本地部署stable-diffusion

下载Homebrew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" ①输入“1”选择中科大版本&#xff0c;然后输入Y(YES)&#xff0c;直接输入开机密码&#xff08;不显示&#xff09;然后回车确认&#xff0c;开始下载 ②…

matlab 基于卡尔曼滤波的GPS-INS的数据融合的导航

1、内容简介 略 25-可以交流、咨询、答疑 2、内容说明 基于卡尔曼滤波的GPS-INS的数据融合的导航 "基于卡尔曼滤波的GPS-INS的数据融合的导航 基于卡尔曼滤波实现GPS-INS组合导航系统" 卡尔曼滤波、GPS、INS、数据融合、导航 3、仿真分析 4、参考论文 略 …

Linux基本指令(后篇)

目录 14.时间指令date 15.Cal指令 16.find指令(非常重要) 17.grep指令 18.打包压缩指令zip和tar以及解压指令unzip和tar 14.时间指令date date(显示当前时间) 1.在显示方面&#xff0c;使用者可以设定欲显示的格式&#xff0c;格式设定为一个加号后接数个标记&#xff0c;其中…

带头结点的双向循环链表

目录 带头结点的双向循环链表 1.存储定义 2.结点的创建 3.结点的初始化 4.尾插结点 5.尾删结点 6.头插结点 7.头删结点 8.查找并返回结点 9.在pos结点前插入结点 10.删除pos结点 11.打印链表 12.销毁链表 13.头插结点2.0版 14.尾插结点2.0版 前言&#xff1a; 当…

Mac右键添加通过VSCode打开

Mac右键添加通过VSCode打开 1 首先打开自动操作 进入方式 访达 – 应用程序 – 自动操作 2. 选择快速操作 3. 添加 最后 commands保存&#xff0c;可以输入自定义的名称 for f in "$" doopen -a "Visual Studio Code" "$f" done4. 找到保存的快…

SpringBoot+mysql+vue实现大学生健康档案管理系统前后端分离

一、项目简介 本项目是一套基于SpringBoot实现大学生健康档案管理系统&#xff0c;主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目可以直接作为bishe使用。 项目都经过严格调试&#…

Java项目学生管理系统三添加学生

​ 欢迎来到本篇博客&#xff0c;昨天我们学习的是查询所有&#xff0c;今天我们将探索一个令人兴奋的话题——Java项目学生管理系统的学生添加功能。作为一个学生管理系统的关键功能之一&#xff0c;学生添加模块扮演着连接教育工作者与学生信息的桥梁。通过本文&#xff0c;我…

视频后期特效处理软件 Motion 5 mac中文版

Motion mac是一款运动图形和视频合成软件&#xff0c;适用于Mac OS平台。 Motion mac软件特点 - 精美的效果&#xff1a;Motion提供了多种高质量的运动图形和视频效果&#xff0c;例如3D效果、烟雾效果、粒子效果等&#xff0c;方便用户制作出丰富多彩的视频和动画。 - 高效的工…

还得是字节出来的,太秀了...

前段时间公司缺人&#xff0c;也面了许多测试&#xff0c;一开始瞄准的就是中级水准&#xff0c;当然也没指望能来大牛&#xff0c;提供的薪资在15-20k这个范围&#xff0c;来面试的人有很多&#xff0c;但是平均水平真的让人很失望。看了简历很多上面都是写有4年工作经验&…

(二)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)

一、无人机模型简介&#xff1a; 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 参考文献&#xff1a; [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、Tiki-taka算法&#xff08;TTA&#xf…

zookeeper分布式先进先出队列 (实操课程)

本系列是zookeeper相关的实操课程&#xff0c;课程测试环环相扣&#xff0c;请按照顺序阅读来学习和测试zookeeper。 阅读本文之前&#xff0c;请先阅读----​​​​​​zookeeper 单机伪集群搭建简单记录&#xff08;实操课程系列&#xff09;zookeeper 客户端常用命令简单记录…

鸿蒙开发笔记

最近比较火&#xff0c;本身也是做前端的&#xff0c;就抽空学习了下。对前端很友好 原视频地址&#xff1a;黑马b站鸿蒙OS视频 下载安装跟着视频或者文档就可以了。如果你电脑上安装的有node&#xff0c;但是开发工具显示你没安装&#xff0c;不用动咱们的node&#xff0c;直…

高效复习的打印神器,学习好助手工作好搭档,咕咕机T1错题打印机上手

日常工作和学习的时候&#xff0c;经常需要打印很多电子表格和文档&#xff0c;但是手边不一定有打印机&#xff0c;对于在家或宿舍学习的学生来说更是如此&#xff0c;不过市面上常见的打印机需要墨盒、硒鼓等配件&#xff0c;使用成本高且不方便操作。那么有没有一款快捷易用…

智慧箱变监控系统

智慧箱变监控系统是一种先进的监控解决方案&#xff0c;依托电易云-智慧电力物联网&#xff0c;旨在实现对箱式变电站&#xff08;简称“箱变”&#xff09;的智能化、远程化监控和管理。以下是智慧箱变监控系统的主要功能和优势&#xff1a; 实时监测&#xff1a;通过传感器和…

ChatGPT一周年,奥特曼官宣 OpenAI 新动作!

大家好&#xff0c;我是二狗。 今天是11月30日&#xff0c;一转眼&#xff0c;ChatGPT 发布已经一周年了&#xff01; 而就在刚刚&#xff0c;ChatGPT一周年之际。 OpenAI 正式宣布Sam Altman回归重任CEO, Mira Murati 重任CTO&#xff0c;Greg Brockman重任总裁&#xff0c;O…

公共字段自动填充

1.自定义注解&#xff0c;用于表示需要进行公共字段自动填充的方法 OperationType枚举类 自定义切面类 通过反射为属性赋值

XXL-Job详解(三):任务开发

目录 前言任务配置属性任务开发bean模式1、创建任务2、调度中心新建调度任务 GLUE模式1、调度中心&#xff0c;新建调度任务&#xff1a;2、开发任务代码 前言 看该文章之前&#xff0c;最好看一下之前的文章&#xff0c;比较方便我们理解 XXL-Job详解&#xff08;一&#xf…

np.newaxis()函数的使用

import numpy as np x np.array([2, 4, 7, 9, 20]) print(x的形状:, x.shape) # x的形状: (5,) print(x的值:, x) # x的值: [ 2 4 7 9 20]x_new1 x[np.newaxis, :] # (5,) -----》 (1, 5) print(x_new1的形状:, x_new1.shape) # x_new1的形状: (1, 5) print…

【Openstack Train安装】十二、Cinder安装

Cinder在块存储资源和计算服务&#xff08;Nova&#xff09;之间提供了一个抽象层。通过Cinder API&#xff0c;块存储可以被管理&#xff08;创建、销毁和分配等&#xff09;&#xff0c;而不需要知道提供存储的底层资源。 本文介绍Cinder安装步骤&#xff0c;Cinder需在控制节…