数组指针与指针数组

2023-11-14

一、数组指针

数组指针,即是指向数组的指针,数组指针中存放的应该是数组的地址

1. 数组名的区分
数组名:数组名就是数组的最大存储单元的首地址,指向第一个元素,所以数组名的类型为元素类型的指针
&数组名[0]:第一个元素的首地址,和数组名的值,以及含义都一模一样
&数组名:整个数组的首地址,指向的是整个数组,与上面两者值一样,但是含义却不一样

2. 一维数组指针的使用
图解

数组指针的定义是例如:int(*p)[3]=NULL;

int main()
{
	int(*p)[4] = NULL;//数组指针定义
	int arr[4] = { 1, 2, 3, 4 };
	p = &arr;//类型为int(*)[]
	printf("%d %d %d %d\n", p, p + 1, p + 2, p + 3);//跳过整个数组
	printf("%d %d %d %d\n", &arr, &arr + 1, &arr + 2, &arr + 3);//每个元素地址
	printf("%d %d %d %d\n",arr,arr+1,arr+2,arr+3);//每个元素地址
	printf("%d %d %d %d\n", *p, *p + 1, *p + 2, *p + 3); //每个元素地址
	printf("%d %d %d %d\n", *arr, *(arr + 1),*( arr + 2), *(arr + 3));//对每个元素地址进行解引用,即取出该地址中的数据
	printf("%d %d %d %d\n",*(*p),*(*p+1),*(*p+2),*(*p+3));//对每个元素地址进行解引用,即取出该地址中的数据
	return 0}

3. 二维数组指针的应用
二维数组指针与一维数组指针的应用有些差别,因为二维数组的每个元素都是一维数组,所以最大的存储单元应该是一个指向一维数组的指针。所以不用对二维数组取地址。

在这里插入图片描述

//二维数组的每个元素都是一维数组,所以最大的存储单元应该是一个指向一维数组的指针
	int(*pp)[4] = NULL;
	int str[2][4] = { 1, 2, 3, 4 ,5,6,7,8};
	pp = str;//类型为int*  注意不能取地址
	printf("%d %d\n",pp,pp+1);//跳过一个一维数组的长度
	printf("%d %d\n", str, str + 1);//跳过一个一维数组的长度
	printf("%d %d %d %d\n", *pp, *(pp + 1));//取第一行,第二行的第一个地址
	printf("%d %d %d %d\n", **pp, *(*pp + 1), *(*pp + 2), *(*pp + 3));//第一行的每个元素
    printf("%d %d %d %d\n", **(pp+1), *(*(pp + 1) + 1), *(*(pp + 1) + 2), *(*(pp + 1) + 3));//第二行的元素输出

二、指针数组

指针数组是每个元素都是指针的数组。存储类型为int*这样的指针;


//指针数组
int main()
{
	int* p[2] = { NULL };//指针数组中每一个都是指针,
	//方法1
	int* a = NULL;
	int b = 6;
	a = &b;
	p[0] = a;
	printf("%d\n",*p);
	printf("%d\n",a);
	//方法2用动态内存分配
	for (int i = 0; i < 2; i++)
	{
		p[i] = (int*)calloc(1,sizeof(int));//开辟4个字节空间
		if (p[i] == NULL)//判断是否成功
		{
			printf("开辟空间失败 %d",i);
			return -1;
		}
		*p[i] = i;//赋值
	}
	for (int i = 0; i < 2; i++)
	{
		printf("%d ",*p[i]);
	}
	while (1);
	return 0;
}

三、数组指针与指针数组的区别

指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身的大小决定(如自己动态开辟空间),每一个元素都是一个指针。它是“储存指针的数组”的简称。
数组指针:首先它是一个指针,它指向一个数组。至于它指向的数组占多少字节,不知道,具体要看数组大小。它是“指向数组的指针”的简称。

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

数组指针与指针数组 的相关文章

随机推荐

  • Custom numeric format strings

    string Multiplier Multiplier 0 Console WriteLine string Format Multiplier 1000000 string LiteralChar LiteralChar 0 000 C
  • vue3 图片路径转base64 base64转file(二进制一般后台需要格式) file转base64

    1 图片路径转64 function imageUrlToBase64 url let homeImage new Image 解决跨域问题 homeImage setAttribute crossOrigin anonymous home
  • 为什么前端监控要用GIF打点

    1背景 我们知道 目前主流的前端监控 百度统计 友盟 谷歌统计 都在用GIF进行打点 但是 为什么这些系统都会使用GIF 难道是因为没有其他的解决方案吗 这得从前端监控的原理说起 2前端监控的原理 所谓的前端监控 其实是在满足一定条件后 由
  • DataTable筛选出现异常

    异常详细信息 System ArgumentException 在 Range 对象中 Min 37 必须小于或等于 max 1 解决方法 转化字段类型为int 再次出现问题 HH gt 0 and HH lt 35 出来的数据序列为 1
  • Android Jetpack 之 DataStore

    1 概述 Google 推出了 JetPack 的新成员 DataStore DataStore 是一种新的数据存储方案 DataStore 以异步 一致的事务方式存储数据 克服了 SharedPreferences 的一些缺点 Jetpa
  • 相机标定及点云拼接

    文章目录 前言 一 相机标定原理 二 关键代码 2 1 相机标定代码1 2 2 相机标定代码2 2 3 点云拼接代码 三 结果展示 总结 前言 在上一篇中已经完成了从图像到点云的转换 但是只针对单个相机 在这一篇中将再进一步 从两个相机拍摄
  • 【Python 1-5】Python教程之——详解字符串

    字符串或串 String 是由数字 字母 下划线组成的一串字符 字符串 字符串就是一系列字符 在Python中 用引号括起的都是字符串 其中的引号可以是单引号 也可以是双引号 如下所示 This is a string This is al
  • vba中function(自定义函数)

    自定义函数 顾名思义 就是自己定义的函数 为什么使用自定义函数 exce内置了很多有用的函数 但仍无法满足工作需求 自定义函数的作用 简化复杂的公式 可以和工作表函数相互嵌套使用 Function 函数名 参数1 参数2 代码 函数名 代码
  • Go语言面试题--进阶语法(32)

    文章目录 1 关于 channel 下面描述正确的是 2 下面的代码有什么问题 3 下面的代码有什么问题 4 下面代码输出什么 1 关于 channel 下面描述正确的是 A close 可以用于只接收通道 B 单向通道可以转换为双向通道
  • 大端小端以及内存对齐的优势

    为什么区分大小端 编程语言中不同类型的变量所占的字节大小不一样 大端 低位数据存放在高位地址为大端编码 小端 低位数据存放在低位地址为小端编码 如图所示 对于选择大端小端对程序性能的思考 首先 数据离散程度不同 字节序会在很大程度上影响速度
  • 零基础学习cJSON 源码详解与应用 (三)cJSON_Print();打印json

    文章目录 一 cJSON Print 源码分析 二 print value 2 1 ensure 2 2 print string 2 3 print number 2 4 print array 2 5 print object 三 up
  • 在Windows中使用虚拟机

    文章目录 VirtualBox使用教程 安装教程 获取 CentOS 及版本选择 在虚拟机上安装CentOS 在虚拟机中允许linux系统卡的原因 配置CentOS 安装图形界面系统 X Window System 安装图形界面程序 GNO
  • 版本控制工具

    版本控制工具 版本控制工具如何下拉库里边的内容 从无到有 在SVN中 在本地库中右键单击 选择tortoise SVN 版本库浏览器 然后输入地址 账号密码登录 登陆完毕后选择要下载的文件右键单击选择检出即可下拉到本地库 在GIT中 在本地
  • JQuery纯手搓轮播图【支持自动轮播、划动轮播、圆点联动】

    HTML div class lunbo div class lunbo content div class imgContent img class imgItem activeImg Started src img lunbo01 jp
  • RebornDB:下一代分布式Key-Value数据库

    http www csdn net article 2015 07 13 2825186 现实世界有许多的Key Value数据库 它们都被广泛应用于很多系统 比如 我们能够用Memcached数据库存储一个MySQL查询结果集给后续相同的
  • Thread类的用法 && 线程安全 && 多线程代码案例 && 文件操作和 IO && 网络原理初识 &&UDP socket

    第 1 题 编程题 题目名称 编写代码 实现多线程数组求和 题目内容 给定一个很长的数组 长度 1000w 通过随机数的方式生成 1 100 之间的整数 实现代码 能够创建两个线程 对这个数组的所有元素求和 其中线程1 计算偶数下标元素的和
  • 内存数据库的分布式数据库架构

    author skate time 2012 02 16 转载一篇文章 本文提出了一种通过引入内存数据库层 建立两层多分区分布式数据库架构 此方案用于解决海量高并发系统的数据存储和访问问题 尤其适用于电子商务等数据模型复杂且业务复杂的互联网
  • YOLO5用于交通标志牌(TT100K数据集)的训练预测(包含数据集格式的转换——TT100K-CoCo格式-YOLO格式,数据集比例的重新划分以及对应图片集的重新划分)

    共勉 一 数据集转换 1 1 数据集下载 1 2 数据集格式转换 二 训练预测 三 写在最末 先贴下实验结果 去年就做完了的一个工作 这会终于记录完毕啦 另外如果是对口罩识别检测 可用于毕设 课程设计等等 感兴趣的同学也可参考博主的另一篇博
  • vscode不提示vue代码

    一 前提 已有Vetur 二 解决办法 下载插件 Vue 3 Snippets 发现问题解决
  • 数组指针与指针数组

    一 数组指针 数组指针 即是指向数组的指针 数组指针中存放的应该是数组的地址 1 数组名的区分 数组名 数组名就是数组的最大存储单元的首地址 指向第一个元素 所以数组名的类型为元素类型的指针 数组名 0 第一个元素的首地址 和数组名的值 以