数组与指针

博客内容:数组与指针


文章目录

  • 一、 数组?指针?
    • 1.区别与联系
      • 大小
      • 赋值
      • 存储位置
  • 二、指针数组、数组指针?
  • 二维数组和二级指针
  • &数组名与数组的区别
  • 总结


一、 数组?指针?

数组

相同类型数据的集合

指针

指针是内存地址,指针变量是保存指针的变量。一般我们使用的都是指针变量。

1.区别与联系

大小

对于数组来说可以在定义时控制大小,也可以不固定大小。使用关键字sizeof来计算。

int main()
{int arr[5];int brr[] = { 1,2,3,4,5 };printf("%d \n",sizeof(arr));printf("%d ", sizeof(brr));return 0;
}

在这里插入图片描述
对于指针只关心机器,在32位机器下大小为4字节,64位下为8字节

int main()
{int* ptr;char* srt;printf("%d \n", sizeof(ptr));printf("%d \n", sizeof(srt));return 0;
}

在这里插入图片描述在这里插入图片描述

赋值

指针只要类相同就可以进行赋值,数组需要一个一个进行赋值。

存储位置

数组存储在栈上,或者使用内存函数(malloc)在对上开辟空间。
指针本身就是一个变量,存放指针的也是一个变量,所以存储位置不确定。

二、指针数组、数组指针?

指针数组

本质是数组,数组中每个元素的类型是指针

int* arr[10]//存储的10个int类型的指针

数组指针

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

int*p)arr[10];//这是指针,指向的是一个数组,数组中有10个int类型。

如果查看运算符优先级表,可以看出对于[]的优先级高于*。所以使用()来让*优先级提高。这样就方便记忆了。
同样类似的还有函数指针,

void Add(int a,int b)
{printf("%d\n", a + b);
}
int main()
{void(*fun)(int, int) = &Add;Add(1, 2);fun(1,2);(*fun)(1, 2);return 0;
}

在这里插入图片描述

函数指针在使用时可以解引用,也可以直接使用指针。

二维数组和二级指针

二维数组
在这里插入图片描述
对于二维数组看做是一个数组中存储了一个数组。对于二维数组的表示是行可不写,但是列必须有。初始化时不可以间断。

int arr1[10][];

在这里插入图片描述

	int arr2[][2] = { {1,2},{},{2,3} };

在这里插入图片描述
二级指针就是指向指针的指针。

int main()
{int i = 10;int* p = &i;printf("%d\n",*p);int** q =& p;printf("%d\n", (*(*q)));return 0;
}

在这里插入图片描述
当然数组在传参时可以使用指针来作为形参。

&数组名与数组的区别

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

在这里插入图片描述
&是对整个数组的地址,数组名代表首元素位置。对于数组这样连续的空间,数组使用数组来记录开始位置。所以这就为什同样是+1,但是内存地址的差距这么大原因。


总结

使用数组和指针的转换对于我们编程来说会变得更加灵活,指针使用到位,会让数组代码看起来更加的优雅。

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

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

相关文章

使用SpringBoot+React搭建一个Excel报表平台

摘要:本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 Excel报表平台是一款功能强大、操作简单的系统平台,可以帮助用户上传…

【C++/嵌入式笔试面试八股】二、24.TCP三次握手四次挥手 | TCP可靠性

TCP三次握手四次挥手 64.TCP头部中有哪些信息?❤️ TCP数据报格式(左图) UDP数据报格式也放这(右图),不具体解释了。 结合三次握手四次挥手来看 端口: 区分应用层的不同应用进程 扩展:应用程序的端口号和应用程序所在主机的 IP 地址统称为 socket(套接字),IP:端口…

如何在 Windows 中免费合并 PDF 文件 [在线和离线]

PDF是一种广泛使用的文件格式,具有兼容性好、安全性高、易于打印、方便浏览等众多优点。在工作和学习过程中,经常需要将同一类型的PDF文件合并起来,以方便传输和查看,使得合并PDF文件成为一种重要的数据整合方法。 如果您想知道如…

1、Kubernetes 概述和架构

目录 一、基本介绍 二、kubernetes功能和架构 2.1、 概述 2.2 、功能 (1)自动装箱 (2)自我修复(自愈能力) (3)水平扩展 (4)服务发现 (5)滚动更新 &a…

Linux进程理解【环境变量】

Linux进程理解【环境变量】 提到环境变量,大家可能有些陌生,如果编写过Java就知道,编写Java需要提前安装JDK,这个操作就是配置Java的编码环境,在Linux中当然也少不了环境变量,下面我们就一起来看看 文章目…

Node.js 版本管理工具 n 使用指南

Node.js 版本更新很快,目前 node v20.x 已经发布,我们在使用时避免不了会需要切换不同的 Node.js 的版本来使用不同版本的特性。 所以就出现了像 windows 上的 nvm,MacOS 上的 n 工具,本文就介绍一下如何使用 n 管理 Node.js 的版…

Django_haystack全文搜索

haystack是全文搜索的框架,支持whoosh、solr、Xapian、Elasticsearc四种全文检索引擎,点击查看官方网站。 whoosh是用纯Python编写的全文搜索引擎,虽然性能比不上sphinx、xapian、Elasticsearc等,但是无二进制包,程序…

LiveNVR监控流媒体Onvif/RTSP功能-安全控制HTTP接口鉴权开启禁止游客访问开启后401 Unauthorized如何播放调用接口

LiveNVR安全控制HTTP接口鉴权开启禁止游客访问开启后401 Unauthorized如何播放调用接口? 1、安全控制1.1、接口鉴权1.2、禁止游客访问 2、401 Unauthorized2.1、携带token调用接口2.1.1、获取鉴权token2.1.2、调用其它接口2.1.2.1、携带 CookieToken2.1.2.2、携带 U…

使用Feign进行微服务之间的接口调用:Spring Cloud Alibaba中的声明式服务调用

一、Feign介绍 Feign是一个声明式的HTTP客户端框架,用于简化微服务架构中服务之间的通信。它是Spring Cloud框架的一部分,旨在提供一种优雅且易于使用的方式来定义和调用HTTP请求。 Feign的设计目标是让服务之间的通信变得更加简单和直观。通常情况下&am…

opencv 基础学习08-图像通道操作

opencv 基础学习08-图像通道操作 什么是图像通道?通道操作:**1 通过索引拆分**2 通过opencv 函数拆分通道合并 什么是图像通道? OpenCV的通道拆分功能可用于将多通道图像拆分成单独的通道,这在图像处理和计算机视觉任务中具有许多…

你的隐私被泄漏了吗

近日,某高校毕业生在校期间窃取学校内网数据,收集全校学生个人隐私信息的新闻引发了人们对互联网生活中个人信息安全问题的再度关注。在大数据时代,算法分发带来了隐私侵犯,在享受消费生活等便捷权利的同时,似乎又有不…

【Vue3】setup参数细讲!computed计算属性和watch监听属性

setup参数细讲!computed计算属性和watch监听属性 setup细讲!setup参数,steup(props,context)参数1.props,负责接收父组件传过来的值参数2.contextcontext.attrscontext.emitcontext.slots, 插槽…

.Net Core Restful Api 版本区分第一种

前言:在我们进行Web Api开发时,版本的区分,是必须要考虑的,涉及到我们的版本发布,切换等,如何从旧版本无缝的切换到新版本? 下面,我们通过使用[ApiVersion]特性,实现两个…

Spring MVC 系列1 -- 初识Spring MVC

目录 1. 什么是 Spring MVC? 2. MVC定义 3. 创建SpringMVC项目 ​4. Spring MVC要学习哪些? 1. 什么是 Spring MVC? 官⽅对于 Spring MVC 的描述是这样的: 翻译成中文 从上述定义我们可以得出两个关键信息: 1. Spring MVC 是…

conda疑难杂症

annaconda、miniconda和conda的关系 conda官网 https://docs.conda.io/projects/conda/en/latest/ 下载安装Anaconda: https://www.anaconda.com/products/distribution#Downloads 下载安装Miniconda:https://docs.conda.io/en/latest/miniconda.html 安装 安装…

7月6日华为云盘古气象大模型登上《Nature》杂志:相比传统数值预报快10000倍

7月6日,国际顶级学术期刊《自然》(Nature)杂志正刊发表了华为云盘古大模型研发团队的最新研究成果——《三维神经网络用于精准中期全球天气预报》(《Accurate medium-range global weather forecasting with 3D neural networks》…

C/C++实现高并发http服务器

http高并发服务器实现 基础知识 html,全称为html markup language,超文本标记语言。 http,全称hyper text transfer protocol,超文本传输协议。用于从万维网(WWW:World Wide Web)服务器传输超…

win10远程桌面控制Ubuntu服务器 - 内网穿透实现公网远程

文章目录 前言视频教程1. ubuntu安装XRDP2.局域网测试连接3. Ubuntu安装cpolar内网穿透4.cpolar公网地址测试访问5.固定域名公网地址 转载自cpolar极点云文章:树莓派使用Nginx 搭建轻量级网站远程访问 前言 XRDP是一种开源工具,它允许用户通过Windows R…

【已解决】Flask项目报错TypeError: tuple indices must be integers or slices, not str

文章目录 问题情境报错及分析报错代码分析 解决方案必要的解决方法可能有用的解决方法 问题情境 本解决方案适用情境:在本地可以正常运行的flask项目,放到云服务器报错TypeError: tuple indices must be integers or slices, not str,即代码…

Tomcat之配置文件详解

Tomcat 目录 安装好 Tomcat 后,打开它的文件夹,可以看到以下目录 bin:存放各种启动、关闭和其它程序的脚本 conf:配置文件及相关数据文件存放的目录 lib:Tomcat 使用的库文件存放的目录,如存放 Servlet 规范的 API logs:默认日志文件存放…