一级指针和一维数组

news2024/9/17 8:54:04

文章目录

  • 🍊自我介绍
  • 🍊一级指针和一维数组
  • 🍊a , &a[0]和&a之间的关系


你的点赞评论就是对博主最大的鼓励
当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~


🍊自我介绍

  Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群一名“创始团队·嘉宾” ,现在我来为大家介绍一下有关嵌入式方面的内容。在进入介绍之前,可能有一些小伙伴不了解易编程·终身成长社群;想要进一步了解社群的小伙伴可以点击下方链接自行跳转至关于社群的介绍:

易编程·终身成长社群介绍 :
https://blog.csdn.net/weixin_74300052?spm=1011.2266.3001.5343
在这里插入图片描述


🍊一级指针和一维数组

以int a[5]说明:

前面数组那一章节我们知道 a <==>a[0]
代码:

#include <stdio.h>
int main()
{
	int a[5] = {1,2,3,4,5};
	printf("a = %p\n",a);
	printf("&a[0] = %p\n",a[0]);
	return 0;

}

  最后我们发现他们两个输出结果相同(由于不同设备输出结果不一样,在这里博主就不展示了)

int *p = a;
a[i] <===> *(a + i) <===>*(p + i) <===>p[i]

代码解释:

#include <stdio.h>
int main()
{
	int a[5] = {1,2,3,4,5};
	int *p = a;
	printf("a[3] = %d\n",a[3]);
	printf("*(a + 3) = %d\n",*(a + 3));
	printf("*(p + 3) = %d\n",*(p + 3));
	printf("p[3] = %d\n",p[3]);
	return 0;
}

输出结果:

a[3] = 4
*(a + 3) = 4 
*(p + 3) = 4
p[3] = 4

  看到这里可能有小伙伴有疑问,这里 a 可以当作 p来用,p 也可以当作 a 来用,那么 a 和 p 数据上有什么区别呢?

(1) 一级指针主要保存地址,占4字节(bytes) ,而数组有多个内存空间用来存放不同的数据,空间较大。

		p的类型  int *
		a的类型  int [5]
		
(2) 数组名是一个地址常量,表示数组首元素的地址,常量不能更改

int a[5] = {1,2,3,4,5};
int *p = a;
p++;//true
a++;//error,a 是地址常量,是数组第一个元素的地址,系统自动分配。由于是一个常量,用户不能更改。

代码展示:

#include <stdio.h>
int main()
{
	int a[5] = {1,2,3,4,5};
	int *p = a;
	p++;
	printf("*p = %d\n",*p);//*p<====>*(a + 1)<===>a[1]
	p++;
	printf("*p = %d\n",*p);//*p<====>*(a + 2)<===>a[2]
	return 0;

}

输出结果:

*p = 2
*p = 3

🍊a , &a[0]和&a之间的关系

  仍然以int a[5]为例子:

我们知道a 表示的是数组首元素的地址,a<==>&a[0]
a[0]数据类型为 int
&a[0] 数据类型为 int *
a的数据类型为 int [5]

a<==>&a[0],a[0]占一个小int单元的大小,占4字节(bytes)
&a,代表了int [5]整个大单元的大小,占20字节(bytes)

a + 1<===>&a[0] + 1,偏移了4字节
&a + 1<===>偏移了整个int [5]的大小 20字节(bytes)

小检测:

...
char a[5] = {10,20,31,32,40};
问:
*((char *)(&a + 1) - 3) -2 值为多少?
...

结果:

29

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

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

相关文章

Tugraph的安装部署

文章目录 一、安装Docker二、拉取TuGraph镜像三、访问web端 一、安装Docker http://t.csdnimg.cn/djJYX 二、拉取TuGraph镜像 https://hub.docker.com/search?qtugraph 拉取的时间会有些长 docker pull tugraph/tugraph-compile-ubuntu18.04如docker镜像拉取失败&#xff…

IDEA管理远程仓库Git

1、模拟项目 新建一个文件夹&#xff0c;用来这次演示 用IDEA来打开文件夹 2、创建仓库 在IDEA中给该文件夹创建本地仓库和远程仓库 在菜单栏找到VCS选择Share project on Gitee 在弹窗中输入描述信息 接下来会出现以下弹窗 点击ADD后&#xff0c;在gitee上会创建远程仓库 …

敏捷产品经理实训:助力产品负责人掌握敏捷方法,提升产品开发效率

在当今快节奏的市场环境中&#xff0c;产品经理和产品负责人需要快速响应市场变化&#xff0c;推动产品创新&#xff0c;以满足用户不断变化的需求。敏捷产品经理实训课程专为产品经理和产品负责人设计&#xff0c;旨在帮助他们掌握敏捷方法&#xff0c;提高团队协作和产品开发…

python dash框架

Dash 是一个用于创建数据分析型 web 应用的 Python 框架。它由 Plotly 团队开发&#xff0c;并且可以用来构建交互式的 web 应用程序&#xff0c;这些应用能够包含图表、表格、地图等多种数据可视化组件。 Dash 的特点&#xff1a; 易于使用&#xff1a;Dash 使用 Python 语法…

二叉树的介绍及其顺序结构的实现

Hello, 亲爱的小伙伴们&#xff0c;你们的作者菌又回来了&#xff0c;之前我们学习了链表、顺序表、栈等常见的数据结构&#xff0c;今天我们将紧跟之前的脚步&#xff0c;继续学习二叉树。 好&#xff0c;咱们废话不多说&#xff0c;开始我们今天的正题。 1.树 1.1树的概念和…

Vue3+.NET6前后端分离式管理后台实战(三十二)

1&#xff0c;Vue3.NET6前后端分离式管理后台实战(三十二)

Java上门做饭平台系统小程序源码

&#x1f37d;️解锁新生活方式&#xff01;揭秘“上门做饭平台系统”的五大魅力&#x1f31f; &#x1f3e0;【懒人福音&#xff0c;美食直达家门】 在这个快节奏的时代&#xff0c;谁不想下班后直接享受热腾腾的家常美味呢&#xff1f;上门做饭平台系统就是你的私人厨师团队…

java基础概念07-switch语句

一、switch定义 二、基本语法 switch (expression) { case value1: // 当expression的值等于value1时执行的代码 break; // 可选 case value2: // 当expression的值等于value2时执行的代码 break; // 可选 // 你可以有任意数量的case语句 default: // 可选 // 当没有…

【Android驱动06】GMS兼容性测试CTS --环境搭建、测试执行、结果分析

CTS即Compatibility Test Suite意为兼容性测试&#xff0c;是Google推出的Android平台兼容性测试机制。其目的是尽早发现不兼容性&#xff0c;并确保软件在整个开发过程中保持兼容性。只有通过CTS认证的设备才能合法的安装并使用Google market等Google应用。 一&#xff0c;搭…

leetcode 二叉树专题——java实现

1. 二叉树中序遍历 给一棵树&#xff0c;输出中序遍历。 树已经给你建好了&#xff0c;按照一下形式&#xff1a; /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* Tree…

花10分钟写个漂亮的后端API接口模板!

你好&#xff0c;我是田哥 在这微服务架构盛行的黄金时段&#xff0c;加上越来越多的前后端分离&#xff0c;导致后端API接口规范变得越来越重要了。 比如&#xff1a;统一返回参数形式、统一返回码、统一异常处理、集成swagger等。 目的主要是规范后端项目代码&#xff0c;以及…

数据恢复大师免费版落伍了吗?2024年4大创新恢复工具对比评测

在这个数字时代&#xff0c;要是突然发现电脑里的珍贵照片、视频或者重要文件不见了&#xff0c;那种感觉就像失去了什么重要的东西&#xff0c;让人焦虑又无助。市面上虽然有很多数据恢复软件&#xff0c;但不是所有软件都能满足我们的需求&#xff0c;尤其是那些既免费又好用…

一键解析:由于找不到xinput1_3.dll,无法继续执行代码的问题,有效修复xinput1_3.dll文件

xinput1_3.dll是一个重要的动态链接库文件&#xff0c;它是DirectX软件包的一部分&#xff0c;主要负责处理游戏和多媒体应用程序中的输入功能。当用户尝试启动某些游戏或应用程序时&#xff0c;可能会遇到一个错误提示&#xff0c;指出“由于找不到xinput1_3.dll&#xff0c;无…

开源AI智能名片拓客小程序在企业品牌快速打造中的应用探索

摘要&#xff1a;在数字化浪潮席卷全球的今天&#xff0c;企业品牌的建设与传播已不再局限于传统的广告与营销手段。开源AI智能名片拓客小程序作为一种创新的数字营销工具&#xff0c;凭借其智能化、个性化及高效化的特点&#xff0c;正逐步成为企业品牌快速打造与提升市场影响…

游戏类型有哪些?游戏分类详细解说(一)

这篇文章是来源于游戏工委牵头制定的团体标准&#xff1a;《网络游戏分类》&#xff08;音数协 2023年1月&#xff0c;征求意见稿&#xff09;。 音数协游戏工委是游戏行业自律组织&#xff0c;在其牵头组织下&#xff0c;腾讯、网易、盛趣、索尼、完美世界、巨人网络等单位共…

MTK6983/MT6983天玑9000芯片详细性能参数_MTK联发科5G方案定制

联发科MT6983旗舰5G移动平台处理器集成了蓝牙、FM、WLAN 和 GPS 模块&#xff0c;是一个高度集成的基带平台&#xff0c;集成了调制解调器和应用处理子系统&#xff0c;可支持 LTE/LTE-A/NR 和 C2K 智能手机应用。 该芯片集成了四个 Arm Matterhorn (ELP) 内核、四个 Arm Klein…

Java | Leetcode Java题解之第304题二维区域和检索-矩阵不可变

题目&#xff1a; 题解&#xff1a; class NumMatrix {int[][] sums;public NumMatrix(int[][] matrix) {int m matrix.length;if (m > 0) {int n matrix[0].length;sums new int[m 1][n 1];for (int i 0; i < m; i) {for (int j 0; j < n; j) {sums[i 1][j …

视图库对接系列(GA-T 1400)二十二、视图库对接系列(级联)校时

背景 校时接口一般用的比较少&#xff0c;一般用的话就注册上级成功之后会发送 一个校时&#xff0c;告诉服务端目前客户端的时间情况。 实现 这个实现的话&#xff0c;我们再注册的时候就已经实现了&#xff0c;注册成功就会发送一次校时 先看抓包 具体实现代码 service接…

【转型必看】Java到AI,程序员的逆袭秘籍,转行人工智能不再是梦!

随着技术的不断进步&#xff0c;人工智能&#xff08;AI&#xff09;已经成为当今科技领域最热门的话题之一。许多开发者开始考虑从传统的软件开发领域&#xff0c;如Java&#xff0c;转向人工智能领域&#xff0c;今天小编和大家一起来探讨Java开发者是否可以转型到人工智能&a…