数组与指针

news2024/11/18 7:44:26

博客内容:数组与指针


文章目录

  • 一、 数组?指针?
    • 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.coloradmin.cn/o/756683.html

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

相关文章

谷歌Bard更新:支持中文提问和语音朗读

ChatGPT不断更新功能,从GPT-3到3.5,再到GPT-4,甚至最新的plus版已经支持图像处理和图表生成,而谷歌Bard却自从推出后就一直很安静,没有什么大动作。眼见被ChatGPT、Claude甚至是文心一言抢去了风头,自然心有…

springcache的使用(小白也看得懂)

简介 SpringCache整合Redis可以使用Spring提供的Cacheable注解来实现对Redis的缓存操作。使用这种方式可以轻松地在应用程序中启用缓存,并且不需要手动编写访问Redis的代码。在配置文件中需要配置Redis的连接信息以及缓存管理器。使用这种方式可以做到轻松配置&…

C++报错:二进制“心<“没有找到接受“std:string“类型的右操作数的运算符(或没有可接受的转换)

1、问题&#xff1a;在进行二维数组的相关计算时报错&#xff1a; 二进制"心<"没有找到接受"std:string"类型的右操作数的运算符(或没有可接受的转换) 2、原因&#xff1a;没有加入头文件——String; 3、解决办法&#xff1a;加上头文件——String; 4、…

GNN学习笔记:A Gentle Introduction to Graph Neural Networks

原文地址&#xff1a; https://distill.pub/2021/gnn-intro/ 不同形式来源的图 Images as graphs 论文中提到将图像建模为一张拓扑图的方法是将图像的每一个像素看作图的一个结点&#xff0c;并将单个像素结点与其相邻的所有像素之间建立一条边。 每一个非边缘的像素结点具…

Linux下做性能分析4:怎么开始

战地分析 性能分析常常是一种战地分析&#xff0c;所以&#xff0c;在我们可以端起咖啡慢慢想怎么进行分析之前&#xff0c;我们要先说说我们在战地上的套路。 战地分析是说在实用环境中发现问题&#xff0c;我们真正需要进行性能分析的场合&#xff0c;通常都没有机会让你反…

LeetCode: 18. 四数之和 | 双指针专题

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Java中的几种关键字this、super、static和final介绍

Java中的几种关键字this、super、static和final介绍 在Java编程语言中&#xff0c;关键字是具有特殊含义的预定义标识符。关键字是Java编程语言中具有特殊用途的保留单词&#xff0c;用于表示语法结构和程序行为。关键字在语法上具有特定的用途&#xff0c;不能用作变量名、方…

HTTP1.1、HTTPS、HTTP2.0 、HTTP3.0

HTTP1.1 优点&#xff1a; 整体方面&#xff1a;简单、灵活和易于扩展、应用广泛和跨平台 性能方面&#xff1a;长连接、管道网络传输解决请求队头阻塞&#xff08;没有使用&#xff09; 缺点&#xff1a; 安全方面&#xff1a;无状态、明文窃听、伪装、篡改 性能方面&am…

进程间通信之匿名管道

进程间通信—管道 一、进程间通信介绍二、管道1.匿名管道1.1父进程和一个子进程之间的通信1.2父进程和多个子进程之间的通信 一、进程间通信介绍 1.进程间为什么要进行通信&#xff1f; 进程间通信的是为了协调不同的进程&#xff0c;使之能在一个操作系统里同时运行&#xff…

代码随想录day4 | 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 02.07.链表相交 142.环形链表II

文章目录 一、两两交换链表中的节点二、删除链表的倒数第N个节点三、链表相交四、环形链表 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II 一、两两交换链表中的节点 两两交换链表中的节点 注意是两两交换&#xff0c;采用虚拟…

Global symbol “%data“ requires explicit package name

Global symbol “%data” requires explicit package name 如图编写demo的时候出现了如图的问题&#xff0c;在网上查找到的原因是&#xff1a; 一&#xff0c;使用use strict; &#xff0c;修改其他代码&#xff0c;如下&#xff1a; 1&#xff0c;首先&#xff0c;检查你是不…

静态库和动态库的区别与优缺点

文章目录 静态库与动态库的区别动态库与静态库的优缺点 静态库与动态库的区别 静态库直接打包链接到可执行程序 动态库将不会链接到可执行文件 &#xff0c;执行文件运行时需要动态加载 动态库 &#xff0c;所以需要提前知道动态库路径&#xff0c;需要将路径保存到环境变量或…

亲测:2核4G云服务器性能测试能安装多少个网站?

2核4G服务器能安装多少个网站&#xff1f;2核4g配置能承载多少个网站&#xff1f;一台2核4G服务器可以安装多少个网站&#xff1f;阿腾云2核4G5M带宽服务器目前安装了14个网站&#xff0c;从技术角度是没有限制的&#xff0c;只要云服务器性能够用&#xff0c;想安装几个网站就…

【前端知识】React 基础巩固(二十六)——Portals 的使用

React 基础巩固(二十六)——Portals 的使用 Portals 通常&#xff0c;组件会渲染到 root 节点下。可使用 Portals 将组件渲染至其他节点。 添加 id 为 more、modal 的 div 元素 <div id"root"></div> <div id"more"></div> &l…

apache 工作模式 NPM Multi-processing module

Apache 三种工作模式 prefork work event 监控线程相当于 项目组长&#xff0c;面对客户&#xff0c;根据任务自行调度 团队成员。 Prefork模式为Apache默认使用的工作模式&#xff0c;在该模式下&#xff0c;采用的机制是预派生子进程的方式&#xff0c;使用单独的进程来…

设计模式之单例

文章目录 前言一、单例模式的基本定义二、懒汉式单例三、饿汉式单例四、懒汉式单例存在的线程安全问题总结 前言 单例模式是比较经典的设计模式&#xff0c;本篇我们将结合实际案例说明单例模式的实现原理&#xff0c;以及存在的问题。 一、单例模式的基本定义 单例模式&…

【前端知识】React 基础巩固(二十八)——StrictMode

React 基础巩固(二十八)——StrictMode StrictMode StrictMode 是一个用来突出显示应用程序中潜在问题的工具 与 Fragment 一样&#xff0c;StrictMode 不会渲染任何可见的 UI为后代出发额外的检测和警告严格模式检查仅在开发模式下运行&#xff0c;不影响生产构建 严格模式检…

Google DeepMind掌舵人Demis Hassabis专访:合并后「超级单元」内幕,以及如何开展下一代模型研究...

导读 自2023年以来&#xff0c;Google旗下两大顶级人工智能研究团队 DeepMind 与 Google Brain 被不断推上风口浪尖&#xff0c;如何应对OpenAI与微软强强联合&#xff1f;如何组织不被看好的 DeepMind 与 Google Brain 团队合并&#xff1f;Google和OpenAI都没有护城河吗&…

单片机第一季:零基础8——蜂鸣器

蜂鸣器是一种一体化结构的电子讯响器&#xff0c;采用直流电压供电&#xff0c;广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。 蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。 想要压电式蜂鸣器发声&…