基础备忘:数组指针与对一维数组名取地址

2023-11-19

一、指向一维数组的数组指针

数组指针是指向一个数组的指针。如

int (*p)[10];

p是一个指针,指向一个包含10个元素的一维数组,数组元素是整形。

如果写成了int *p[10],则是一个指针数组,由于[ ]的优先级比*的高,p先与[ ]结合,p就是数组类型的数据,元素是指针。

下面是数组指针与一维数组名取地址的实验:

#include<iostream>
using namespace std;
int main()
{
    int a[10]={1,2,3,4,5,6,7,8,9,0};
    int (*p)[10];
    p=&a;
    cout<<a<<endl;
    cout<<&a<<endl;
    cout<<p<<endl;
    system("pause");
        }


地址值是一样的,但是意义却不一样。

1)a是数组名,也是数组的首地址,相当于&a[0],类型是int*,即指向int的指针。是一个一维指针,每增加1移动一个int单位。如int *p=a; p++;p指向的是元素a[1];实验代码如下:

#include<iostream>
using namespace std;
int main()
{
    int a[10]={1,2,3,4,5,6,7,8,9,0};
    //int (*p)[10];
    int *p=a;
    p++;
    cout<<*(p)<<endl;
    cout<<a<<endl;
    cout<<&a<<endl;
    cout<<p<<endl;
    system("pause");
        }

结果:


2)&a的类型是int*[10],类型是指向一个含有10个int元素的数组的一个指针。是一个二级指针,每增加1移动1个Int[10]单位。如*(&a+1)表示整个数组后的一个单位,即0后面的一个单位。*(*(&a+1)-1)就表示a[9]=0;实验代码和结果如下:

#include<iostream>
using namespace std;
int main()
{
    int a[10]={1,2,3,4,5,6,7,8,9,0};
    int (*p)[10];
    p=&a;
    cout<<*(*(&a+1)-1)<<endl;
    cout<<*(*(p+1)-2)<<endl;
    system("pause");
        }



结果:

3)p是数组指针,指向一个含有10个int元素的数组的一个指针a。与&a一致。


二、指向多维数组的数组指针。

指针与指向的数组的维数没有关系,关键在于数组指针是一个二级指针,指向一个一维数组单位。数组指针移动一个单位,相当于移动了一整个一维数组。

为了能更好地理解数组指针,与普通指针及二级指针的区别,下面举例说明一下。

例如:

int a[3][3];

int (*p)[3]=a;

这里a是个二维数组的数组名,相当于一个二级指针常量;p是一个指针变量,它指向包含5个int元素的一维数组,此时p的增量以一维数组长度为单位;p+i是二维数组a的i行的起始地址,*(p+2)+2表示a数组2行2列元素地址(第一行为0行,第一列为0列),*(*(p+2)+2)表示a[2][2]的值。

实验代码如下:

#include<iostream>
using namespace std;
int main()
{
    int a[3][3]={1,2,3,4,5,6,7,8,9};
    int (*p)[3];//指针与指向的数组的维数没有关系,关键在于数组指针是一个二级指针,指向一个一维数组单位。数组指针移动一个单位,相当于移动了一整个一维数组。 
    p=a;//指向一维的是 p=&a;
    cout<<*(*(a+1)-1)<<endl;//对比一维 
    cout<<*(*(p+1)-2)<<endl;//对比一维 
    cout<<"*(*(a+2)+2): "<<*(*(a+2)+2)<<endl;
    cout<<"a[2][2]: "<<a[2][2]<<endl;
    cout<<"p[2][2]: "<<p[2][2]<<endl;
    cout<<"*(p[2]+2): "<<*(p[2]+2)<<endl;
    system("pause");
        }


结果:


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基础备忘:数组指针与对一维数组名取地址 的相关文章

  • 一、MM Segmentation 介绍与安装

    时间 2022年4月1日 内容 学习MM Segmentation MM Segmentation 介绍和理解 MM Segmentation 利用注册器和配置文件 实现了 可拓展性 和 易用性 它是一个封装了许多语义分割深度神经网络的框架

随机推荐

  • solidity经典案例----智能小游戏

    参考于https ke qq com webcourse 2379017 103111126 taid 10365401060101385 vid 5285890802017890711 1 案例功能介绍 平台方部署智能合约 用户选择下大或
  • pytorch.onnx.export方法参数详解,以及onnxruntime-gpu推理性能测试

    Torch onnx export执行流程 1 如果输入到torch onnx export的模型是nn Module类型 则默认会将模型使用torch jit trace转换为ScriptModule 2 使用args参数和torch j
  • C++ 拷贝构造函数的用法

    当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候 拷贝构造函数就会被自动调用 也就是说 当类的对象需要拷贝时 拷贝构造函数将会被调用 以下情况都会调用拷贝构造函数 一个对象以值传递的方式传入函数体 一个对象以值传递的方
  • 服务器命令使用

    服务器命令使用 一 常用命令 二 实际经常使用的命令 1 ls 列出目录内容 2 unzip 7z x 解压文件夹命令 一级目录 一级目录 一级目录 一 常用命令 ls 列出目录内容 cd 切换目录 pwd 显示当前工作目录的路径 mkdi
  • Nginx反向代理(负载均衡)和作为web服务器的使用

    一 安装启动Nginx 1 官网下载 URL http nginx org en download html 解压后如下 2 启动nginx有很多种方法启动nginx 1 直接双击nginx exe 双击后一个黑色的弹窗一闪而过 或者点击右
  • 我怎样一步一步引导ChatGPT写完一篇本科毕业论文

    先了解毕业论文相关专家 给ChatGPT指定一个角色 我给ChatGPT指定一个学术导师角色 好家伙 给我谦虚起来了 好 换个方式 他开始听话了 了解论文格式 计算机科学与技术专业论文一般有哪些部分组成 选题 了解方向 请先告诉我计算机科学
  • VUE-CLI学习第七天

    VUE CLI学习第七天 vue vuex学习 vuex结构 引入vuex vuex的使用 state mutation action modules getters 对象解构 vuex模块封装 vue vuex学习 vuex结构 src
  • Python爬虫分析CSDN个人博客数据

    前言 到周末了 产生一个idea 就是获取个人的全部博客标题及链接 发布时间 浏览量 以及收藏量等数据信息 按访问量排序 整理成一份Excel表存储 使用时 输入个人博客ID即可 从数据获取到解析存储 用到requests Beautifu
  • Hystrix-Dashboard介绍+案例+图分析

    测试中使用到的代码到在这里https download csdn net download zhou920786312 10853300 Hystrix Dashboard介绍 实时监控Hystrix的各项指标信息 是Hystrix的仪表盘
  • 使用Pytorch框架

    文章目录 Python深度学习神经网络的API pytorch简介 pytorch安装 GPU和CPU 张量 1 基本概念 2 图像作为输入 3 张量的创建方式 弄好一个numpy数组后 利用它有四种方式创建张量 没有预先确定数据 生成默认
  • a标签设置下载设置文件名,并且设置无效的解决方法

    设置 a 标签的 download属性 可以重置 文件名 如下代码 文件名重置为 file xlsx a href http 192 168 1 1 abcd xlsx 下载 a 这种写法有个前提 href 的下载地址 和 当前网站地址 必
  • SQL中ALL、Any、Some的区别

    SQL语句中存在3个著名的量词 some all 和 any All 只有当其所有数据都满足条件时 条件才成立 Any 只要有一条数据满足条件 条件就成立 Some 其中存在一些数据满足条件 作用和Any大致相同 常规的使用中看作一致即可
  • 来这里读懂英文!!!认清楚API !!!

    API Aplication Programming Interface 应用程序接口 直接的说 API就好比是一个信使 发送请求 告诉系统你想要做什么 然后把结果告诉你 再或者说 不论何时想到API 都应当把它想象成为餐馆的服务生 奔波于
  • Qt自带的日志框架

    描述 Qt中使用Qt qInstallMessageHandler 注册日志消息 日志级别 qDebug 调试信息 qWarning 警告信息 qCritical 严重错误 qFatal 致命错误 代码实现 void outputMessa
  • 服务数据的定义和使用

    1 自定义数据服务 在包下创建srv文件夹 在文件夹下创建Person srv 在Person srv下输入以下内容 代表数据类型 string name uint8 age uint8 sex uint8 unknown 0 uint8
  • Linux系统安装android studio

    版权声明 本文为博主原创文章 未经博主允许不得转载 标签 空格分隔 Linux android studio 下载openjdk 7 jdk 通过终端直接安装的方式 不需要进行jdk配置 如下 sudo apt get install op
  • 如何把本地项目的代码上传到 GitHub 上(详解)

    此教程适用于已经安装 git 并且已经注册 GitHub 账号的电脑 如果没有下载 git 或者还没有注册过 GitHub 账号的 可以找相关教程弄一下 下面直接开整 说明 这里的案例就用我之前写的一个前端页面 内蒙古招生考试信息网首页 来
  • 【头歌-Python】Python第六章作业(初级)

    第1关 列表的属性与方法 任务描述 初始化一个空列表 输入一个正整数 n 接下来 你将被要求输入 n 个指令 每得到一个指令后 根据指令的字符串进行对应的功能操作 指令形式及对应功能如下 insert i e 在第 i 个位置插入整数 e
  • 5秒之后自动跳转页面

  • 基础备忘:数组指针与对一维数组名取地址

    一 指向一维数组的数组指针 数组指针是指向一个数组的指针 如 int p 10 p是一个指针 指向一个包含10个元素的一维数组 数组元素是整形 如果写成了int p 10 则是一个指针数组 由于 的优先级比 的高 p先与 结合 p就是数组类