数组指针

news2024/11/23 12:03:09

数组指针的定义

1.数组指针是指针还是数组?

指针。

    int a = 10;
	int* p = &a;//指向整型数据的指针
    char b = 'w';
	char* q = &b;//指向字符变量的指针

 所以数组指针应该是指向数组的指针。

2.数组指针应该怎么定义?

     int arr[10] = { 0 };
	int(*p)[10] = &arr;

 在数组指针定义时区别指针数组的定义,指针数组的定义如下

	int* p1[10];

本质还是数组,该数组元素类型为int*,所以每个元素存放的是地址。

3.数组指针定义的解释

    int arr[10] = { 0 };
	int(*p)[10] = &arr;

 说明:p和*结合,说明p是一个指针变量,该指针指向大小为10个整型的大小的数组,所以p是一个指针,指向一个数组,叫做数组指针。

分析下面的代码

int main()
{
	int arr[10] = { 0 };
	printf("%p\n", &arr[0]);
    printf("%p\n", arr);
    printf("%p\n", &arr);



}

运行结果展示

为什么三个地址一样呢?难道他们三个的意思是一样的?接着看下面的代码 

int main()
{
	int arr[10] = { 0 };
	printf("%p\n", &arr[0]);
	printf("%p\n", &arr[0] + 1);
    printf("%p\n", arr);
	printf("%p\n", arr+1);
    printf("%p\n", &arr);
	printf("%p\n", &arr+1);


}

分别给地址做加1操作得到结果如下

 可以发现上面两个是地址加一是跳四个字节,而最后一个4->c,差个8,a->c,差了个2,由于十六进制2相当于32,32+8=40,最后一个差了四十个字节,所以其实三个的意思并不一样,

&arr[0]:首元素的地址

arr:数组名表示的是数组的首地址

&arr:表示整个数组的地址;

前两个都可以用整型指针存放他们的地址,最后一个可以用数组指针来存放他的地址

    int arr[10] = { 0 };
	int(*p)[10] = &arr;

4.数组指针的使用

void print( int(*p)[10],int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", *(*p + i));
	}

}
int main()
{
	int arr[10] = { 1 ,2 ,3, 4, 5, 6, 7, 8, 9, 10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	print(arr, sz);
}

有人会问arr应该用int*去接收,为什么用int(*p)[10]这个也可以呢?可能编译器做了优化,不会报错

void print( int(*p)[10],int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", *(*p + i));
	}
}
int main()
{
	int arr[10] = { 1 ,2 ,3, 4, 5, 6, 7, 8, 9, 10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	print(&arr, sz);
}

下面的改成了整个数组的地址,这样理解才和上面说的一致

 *(*p + i)

解释一下这一行p代表的是整个数组的地址,对p解引用*p,相当于拿到整个数组,所以*p相当于数组名,而数组名相当于首元素地址,+i操作就是对首元素地址跳四i个字节,然后对(*p+i)解引用得到的*(*p+i)得到对应地址上存的值,一般不用数组指针在一维数组上,下面举例在二维数组上的使用

void print(int(*p)[4], int k, int q)
{
	for (int i = 0; i < k; i++)
	{
		int j = 0;
		for (j = 0; j < q; j++)
		{
			printf("%d ",*(*(p+i)+j));
		}
		printf("\n");
}
}
int main()
{
	int arr[3][4] = { {1,2,3,4},{4,5,6,7},{6,7,8,9} };
	print(arr, 3, 4);
}
*(*(p+i)+j)

这里的p+i,相当于第i行整行数组的地址,*(p+i)相当于拿到了这一行数组,也相当于数组名,也相当于这一行首元素地址,(*(p+i)+j),指的是这一行第j+1元素的地址,然对(*(p+i)+j)解引用得到的是*(*(p+i)+j)就是arr[i][j];

运行结果展示

 int(*p)[4]这个数组指针相当于存的是将这个二维数组的整个一行数组的地址。

希望可以帮助到大家,如果有不对的地方希望大佬指教,谢谢大家了

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

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

相关文章

【python爬虫】获取某一个网址下面抓取所有的a 超链接下面的内容

import requests as rq from bs4 import BeautifulSoup as bs import re# rooturl是传的是我需要查询和抓取的一个网址&#xff0c;可以是html js 等 def gethtml(rooturl, encoding"utf-8"):#默认解码方式utf-8response rq.get(rooturl)response.encoding encodin…

Dockerfile构建httpd镜像(yum方式)

Dockerfile构建httpd镜像&#xff08;yum方式&#xff09; 1、建立工作目录 [rootdocker ~]# mkdir httpd [rootdocker ~]# cd httpd 2、编写Dockerfile文件 [rootdocker httpd]# vim Dockerfile FROM centos:7 MAINTAINER Crushlinux <crushlinux163.com>RUN yum -…

2023最新AI艺术二维码制作软件教程【软件工具+教程】下载

2023最新AI艺术二维码傻瓜式生成教程&#xff0c;不需要市面上繁琐的安装步骤和显卡的配置要求&#xff01;我看了一眼市面上的要么只有视频教程&#xff0c;无工具纯纯牛马用来扯淡了。 要么就是安装繁琐&#xff0c;配置要求还高&#xff01; 这期教程教大家怎么傻瓜式制作…

java在idea开发工具中测试Spring Boot上线后临时变量是否可用

上文 java Spring Boot上线运维 启动jar时控制台调整零时变量 我们亲手在项目部署之后 调试了临时变量 但是 目前就还有一个问题 这些指令一般是运维人员去操作的 但是 我们作为开发人员 要保证这些临时变量都是可操作的 或者 不能操作也要提前说清楚 毕竟项目是你写的 你也要负…

QT充当客户端模拟浏览器等第三方客户端对https进行双向验证

在 ssl单向证书和双向证书校验测试及搭建流程 文章中&#xff0c;已经做了基于https的单向认证和双向认证&#xff0c;&#xff0c;&#xff0c; 在进行双向认证时&#xff0c;采用的是curl工具或浏览器充当客户端去验证。 此次采用QT提供的接口去开发客户端向服务器发送请求&a…

安装skywalking并集成到微服务项目

文章目录 一、前言二、介绍1. 架构 三、安装skywalking服务端四、启动skywalking服务端五、微服务项目开发注册中心网关服务商品服务订单服务支付服务测试 六、下载java客户端七、微服务集成skywalking客户端1. idea启动2. 命令行启动3. 集成效果 八、skywalking客户端配置1. 配…

Java版本spring cloud + spring boot企业电子招投标系统源代码 tbms

&#xfeff;功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&…

Nginx特性应用及载装

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上nginx的并发能力在同类型的网页服务器中表现较好&#xff0c;中国大陆使用nginx的网站有&#xff1a;网易、腾讯、阿里等。 …

19.Netty源码之粘包/拆包

本节课开始我们将学习 Netty 通信过程中的编解码技术。 编解码技术这是实现网络通信的基础&#xff0c;让我们可以定义任何满足业务需求的应用层协议。 在网络编程中&#xff0c;我们经常会使用各种网络传输协议&#xff0c;其中 TCP 是最常用的协议。 我们首先需要了解的是 TC…

手机pdf转换成word免费版?看看这几个转换方法

手机pdf转换成word免费版&#xff1f;在当今信息化的时代&#xff0c;PDF文档已经成为公文交流、资料分享、学术论文等领域中最常用的文件格式之一。然而&#xff0c;PDF文档的固化特性也使其在文本编辑、内容修改等方面存在不便。因此&#xff0c;将PDF文档转换为Word文档已成…

离线部署 python 环境

本机 启动命令行 保存本机python安装的库 pip3 freeze > packet.txt。这样可以在当前目录下生成packet.txt。注意不要随意删除其中行&#xff0c;除非你清楚依赖项 获取库文件&#xff0c;pip3 download -r packet.txt -d ./pip_packages。从当前环境的网络中下载packet.…

springboot项目如何自动重启(使用Devtools检测修改并自动重启springboot)

1. 问题&#xff1a; 我们在项目开发阶段&#xff0c;可能经常会修改代码&#xff0c;修改完后就要重启Spring Boot。经常手动停止再启动&#xff0c;比较麻烦。 所以我们引入一个Spring Boot提供的开发工具&#xff1b; 只要源码或配置文件发生修改&#xff0c;Spring Boot应用…

突破游戏行业天花板,“技术外溢”成趋势

文 | 螳螂观察 作者 | 余一 受游戏版号发放的“放缓”、人口结构的调整&#xff0c;过去两年国内游戏行业过得并不算好。前不久据相关机构发布的数据显示&#xff0c;2022年中国游戏市场实际销售收入2658.84亿元&#xff0c;同比减少306.29亿元&#xff0c;下降10.33%。且游戏…

Maven-学习笔记

文章目录 1. Maven简介2.Maven安装和基础配置3.Maven基本使用4.Maven坐标介绍 1. Maven简介 概念 Maven是专门用于管理和构建Java项目的工具 主要功能有: 提供了一套标准化的项目结构提供了一套标准化的构建流程&#xff08;编译&#xff0c;测试&#xff0c;打包&#xff0c;…

Vulmap和struts-scan联合使用

介绍 Vulmap 是一款 web 漏洞扫描和验证工具, 可对 webapps 进行漏洞扫描, 并且具备漏洞利用功能, 目前支持的 webapps 包括 activemq, flink, shiro, solr, struts2, tomcat, unomi, drupal, elasticsearch, fastjson, jenkins, nexus, weblogic, jboss, spring, thinkphp Vul…

尝试多数据表 sqlite

C 唯一值得骄傲的地方就是 通过指针来回寻址 &#x1f602; 提高使用的灵活性 小脚本buff 加成

【基础理论】了解点过程

Maximum tsunami wave height generated by the 16 Sept. 2015 Chile earthquake, from the International Tsunami Information Center. Posted by Austin Elliott 一、说明 在这个世界上&#xff0c;会发生许多事件&#xff0c;其趋势可能遵循一种模式。在这篇博客中&#…

手把手教你制作春节微信集卡抽奖活动

春节是中国传统的重要节日&#xff0c;商家们纷纷希望能够通过一系列的营销活动吸引更多的用户参与。而微信集福字游戏活动成为了一个赢得春节营销的关键。在本文中&#xff0c;我们将介绍如何通过第三方平台/工具&#xff0c;如乔拓云平台&#xff0c;来注册并登录后台&#x…

漏洞复现--原型链污染、沙箱逃逸绕过

目录 一、原型链污染 1.prototype和__proto__区别&#xff1f;&#xff1f;&#xff1f; 2.原型链污染是什么&#xff1f;&#xff1f;&#xff1f; 3.哪些情况原型链会被污染&#xff1f;&#xff1f;&#xff1f; 4.原型链污染例题 二、沙箱逃逸绕过 1.如何实现沙箱逃逸…

nsq的目录锁,源码分析

文章目录 前言 nsqd启动加锁流程及源码分析 总结 前言 前面几篇博客我们讲了nsq是什么&#xff0c;nsq的安装等&#xff0c;大家想过下面这样的问题没有&#xff0c;就是 问题&#xff1a;一个目录下能启动多个nsqd进程吗&#xff1f; 答案&#xff1a;不能 问题&#xff1…