一维数组、二维数组与指针的关系以及理解

news2024/11/27 22:39:17

一维数组、二维数组与指针的关系以及理解


C语言中,关于数组与指针,我们一般理解为:数组名即为该数组首元素地址,也是数组的首地址,但是关于数组名与指针的联系远不止于此。

文章目录

  • 一维数组、二维数组与指针的关系以及理解
  • 前言
  • 一、一维数组
  • 二、二维数组
  • 总结


前言

关于一维数组、二维数组的理解中的数组名以及其各种标识与语句的含义做一个很简单笔记,作为学习总结
使用的环境为Ubuntu18.04,指针变量长度为8字节。


一、一维数组

代码如下(示例):

#include<stdio.h>
#include<stdlib.h>

int main(int argc,char *argv[])
{

   int arr[5] = {1,2,3,4,5};
   int *p = arr;

   printf("p            = %p \n",p);
   printf("sizeof(p)    = %ld\n",sizeof(p));
   printf("arr          = %p \n",arr);
   printf("&arr[0]      = %p \n",&arr[0]);
   printf("arr+1        = %p \n",arr+1);
   printf("sizeof(arr)  = %ld \n",sizeof(arr));

   printf("&arr         = %p \n",&arr);
   printf("&arr+1       = %p \n",&arr+1);
   printf("sizeof(&arr) = %ld\n",sizeof(&arr));


   return 0;

}

运行结果为:
在这里插入图片描述
一维数组空间分布方式

在这里插入图片描述

一个int 类型占四个字节空间:
总结:
1.一维数组的数组名可以表示数组首地址(也就是首元素的地址),也可以表示整个数组

2.数组名+N(arr+1),可以理解为给指针加 N, 指针前进“当前指针指向的变量类型的长度 × N,因此, 给指向数组的某个元素的指针加 N 后, 指针会指向 N 个之后的元素

3.&a取得是整个数组的地址!既数组名取地址等价于对数组取地址,.&数组名+N(&arr+1),表示跨越整个数组,直接来到数组末尾元素的下一个地址。

4.sizeof(数组名)与 sizeof(&数组名),前一个所求空间长度是整个数组的长度,后一个所求空间长度是指向整个数组的地址的占用空间长度

二、二维数组

代码如下(示例):

#include<stdio.h>
#include<stdlib.h>

int main(int argc,char *argv[])
{

   int arr[2][3] = {1,3,5,7,9,11};

   printf("1   arr          = %p \n",arr);
   printf("2   arr[0]       = %p \n",arr[0]);
   printf("3   arr+1        = %p \n",arr+1);
   printf("4   arr[1]       = %p \n",arr[1]);
   printf("5   arr[1]+1     = %p \n",arr[1]+1);
   

   printf("6   **arr        = %d \n",**arr);
   printf("7   arr[0]       = %d \n",*(arr[0]));

   printf("8   **(arr+1)    = %d \n",**(arr+1));
   printf("9   *(arr[1])    = %d \n",*(arr[1]));
   printf("10  *(arr[1]+1)  = %d \n",*(arr[1]+1));
   printf("11  &arr         = %p \n",&arr);
   printf("12  ***(&arr)    = %d \n",***(&arr));
   printf("13  &arr+1       = %p \n",&arr+1);

   printf("14  sizeof(arr)  = %ld \n",sizeof(arr));
   printf("15  sizeof(&arr) = %ld \n",sizeof(&arr));

   return 0;

}

运行结果:
在这里插入图片描述
先说说一下该二维数组中元素的我们理解排布方式:
在这里插入图片描述
实际的存储方式:
在这里插入图片描述

总结:
1.二维数组的数组名可以表示数组首地址(也就是首元素的地址),也可以表示整个数组

3.数组名[N](arr[N]),理解为第N行的首元素地址,*arr[N] 即对第N行首元素求值。

2.数组名+N(arr+N),可以理解为指针加 N, 指针前进“当前指针指向的变量类型的长度 × N × 每行元素个数,因此, 给指向数组的某个元素的指针加 N后, 指针会指向下行的首元素,**(arr + N)即对第N行首元素求值。

3.数组名[M]+N(arr[M]+N),可以理解为指向从第M行开始的第N个元素,*(arr[M]+N)即对第M行的第N个元素求值

3.&a取得是整个数组的地址!既数组名取地址等价于对数组取地址,.&数组名+N(&arr+1),表示跨越整个数组,直接来到数组末尾元素的下一个地址。

4.sizeof(数组名)与 sizeof(&数组名),前一个所求空间长度是整个数组的长度,后一个所求空间长度是指向整个数组的地址的占用空间长度

总结

‘=’ 表示等效

一维数组a[N]中:
(1)&a = a = &a[0];
(2)a[i] = *(a + i),

二维数组a[M][M]中:
(1)&a = a = a[0] = &a[0][0],
(2)a+1 = a[i] = &a[i][0],
(3)a[i]==&a[i][0] ,a[i] + j= &a[i][j]

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

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

相关文章

指针作为输入参数和输出参数

指针作为输入参数 指针作为输出参数 可以知道&#xff0c;改变的是地址里面的值。

Jmeter性能测试 —— 性能测试的流程和术语

性能测试的流程 一、准备工作 1、系统基础功能验证 一般情况下&#xff0c;只有在系统基础功能测试验证完成、系统趋于稳定的情况下&#xff0c;才会进行性能测试&#xff0c;否则性能测试是无意义的。2、测试团队组建 根据该项目的具体情况&#xff0c;组建一个几人的性能测试…

3DE重客户端安装

3DE重客户端安装 一、百度网盘下载路径二、详细安装步骤 一、百度网盘下载路径 https://pan.baidu.com/s/16TltMRbrWuSe7p-Vn1x4Dw?pwdfku7 提取码&#xff1a;fku7 二、详细安装步骤 1、将\3deinstall\2022x_install_GA目录下的所有.tar文件全选解压 2.点击\3deinstall\…

❤️创意网页:创建一个浪漫的樱花飘落动画效果

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;简单好用又好看&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;欢迎踏入…

web自动化测试

Web自动化测试全套实战教程&#xff1a;PythonSelenium4环境搭建 1.首先&#xff0c;对于想学自动化测试的朋友&#xff0c;那么你得懂一种语言&#xff0c;常用的比如Java或者Python。因为没有语言基础&#xff0c;你是写不出自动化脚本的。 我个人选择python 2.有了开发语言…

数据结构---手撕图解二叉树(含大量递归图解)

文章目录 写在前面二叉树的创建二叉树的遍历前序遍历中序遍历后序遍历层序遍历 二叉树的销毁二叉树节点个数二叉树叶子节点的个数二叉树查找值为x的节点二叉树是否为完全二叉树 写在前面 二叉树的几乎所有实现都是依靠递归实现&#xff0c;递归的核心思路是把任何一个二叉树看…

什么是 CAS(自旋锁)? 它的优缺点? 如何使用CAS实现一把锁?

什么是自旋锁&#xff1f; CAS 没有获取到锁的线程是不会阻塞的&#xff0c;通过循环控制一直不断的获取锁。 CAS: Compare and Swap&#xff0c;翻译成比较并交换。 执行函数 CAS&#xff08;V&#xff0c;E,N&#xff09; CAS 有 3 个操作数&#xff0c;内存值 V&#xff…

【天梯赛集训】7.17习题集

AC&#xff1a; 12 / 12 用时&#xff1a;2 h 21 min 没卡思路&#xff0c;卡了几个测试点。 7-1 输入输出整数 #include <iostream>using namespace std;int main() {int a;cin >> a;cout << a;return 0; } 7-2 调整数组使奇数全部都位于偶数前面其他数字顺…

Anaconda的python虚拟环境中安装cudatoolkit和cudnn加速tensorflow

1. 背景 由于本地安装了cuda 10.0, 但是现在需要在Anaconda中安装不同的python虚拟环境来安装tensorflow-gpu、对应的cudatoolkit、对应的cudnn来加速&#xff0c;下面是具体的演示流程 2. 安装 我这里以安装tensorflow-gpu1.9.0为例&#xff0c;首先进入python的虚拟环境&a…

多元函数的混合偏导数

定理&#xff1a;多元函数的混合导数相等。 直接看图&#xff1a; 引自知乎&#xff1a;点击跳转知乎链接

IIS部署WCF的文件夹要加上IIS_USERS的权限

弯路1&#xff0c;文件夹没加权限报错&#xff1a; 报错如图&#xff1a; 弯路2&#xff1a;多网卡多IP&#xff0c;要设置固定IP。样式&#xff1a; http://192.168.1.4:8080/Service1.svc

RabbitMQ实现六类工作模式

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; RabbitMQ实现六类工作模式 ⏱️ 创作时间&#xff1a; 2023年07月20日…

Jenkins持续集成自动化测试

目录 执行集成构建 持续&#xff0c;自动地构建&测试软件项目代码管理&#xff08;git/svn&#xff09;>编译&#xff08;maven/ant/gradle&#xff09;>打包>测试环境部署>自动化测试 研发体系中的迭代流程 1 源码分支管理&#xff1a; git或者svn, 将不同开…

C++基础与深度解析02——

0. 前言 接上文C基础与深度解析01&#xff0c;本篇主要介绍C的输入输出流&#xff0c;如下 1. 基础概念 1.1头文件 通常&#xff0c;在一个 C 程序中&#xff0c;只包含两类文件—— .cpp 文件和 .h 文件。其中&#xff0c;.cpp 文件被称作 C 源文件&#xff0c;里面放的都是…

【C++】STL——vector的有关空间的函数介绍和使用、size和capacity函数、resize和reserve函数

文章目录 1.vector的使用2.vector空间增长问题&#xff08;1&#xff09;size 获取数据个数&#xff08;2&#xff09;capacity 获取容量大小&#xff08;3&#xff09;empty 判断是否为空&#xff08;4&#xff09;resize 改变vector的size&#xff08;5&#xff09;reserve 改…

Alvas.Audio v2019 Crack

Alvas.Audio v2019 Crack 该库使C#和VB.Net程序员能够创建执行&#xff08;包括混合声音信息&#xff09;、捕获、转换和编辑音频的应用程序。 阿尔瓦斯。音频是C#音乐库。网络程序员。 这使你能够生产。NET程序&#xff0c;例如Winforms/WPF/Windows服务/控制台录音机、Int…

❤️创意网页:使用CSS和HTML创建令人惊叹的3D立方体

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;简单好用又好看&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;欢迎踏入…

经典文献阅读之--SRIF-based LiDAR-IMU Localization(SRIF的LiDAR-IMU自动驾驶鲁棒定位)

0. 简介 对于车辆来说&#xff0c;我们更希望能够得到一个有效的定位系统&#xff0c;能够保证高精度的同时&#xff0c;拥有较高的鲁棒性&#xff0c;而《Robust SRIF-based LiDAR-IMU Localization for Autonomous Vehicles》就是这样一篇文章&#xff0c;在各种场景中实现了…

起名大师,支持多种取名方式,根据自己的喜好去选择

软件功能&#xff1a; 1.参考宝宝姓氏、性别、生辰八字、天格、地格辅助用户为宝宝取名。 2.一次可生产数千个好名字&#xff0c;您还可根据笔画数、拼音、五行等筛选喜欢的名字。 3.提供10余种方法供起名选择&#xff0c;比如指定取名&#xff0c;谐音取名&#xff0c;生日取…

【百度】判断ip地址是否合法

在LeetCode上没有看到这个题目&#xff0c;加上对String的API记得不清楚&#xff0c;导致这个题目没有写得很好&#xff0c;许愿面试官能够仁慈一点 一个合法的ip地址应该有&#xff1a; 三个点将字符串划分为4个数字数字的大小[0,255]&#xff0c;且数字不能为空 合理应用St…