首页 > 其他分享 >数组指针与指针数组

数组指针与指针数组

时间:2024-07-28 18:55:53浏览次数:17  
标签:数组 int 元素 二维 一维 指针

      数组指针与指针数组这两者虽然听起来很像,但是他们的本质却截然不同

在这之前,我们先了解一下二维数组,二维数组的格式为 : 数组类型   数组名 [ ][ ];

前一个代表的是数组的行数,后一个代表的是数组的列数,其实二维数组的元素可以理解为是一维数组,

  int a[2][2] = {{1,2},{3,4}};
 
这个 二维数组 由 两个一维数组 构成, 分别是 {1,2},{3,4};

还有一个概念要了解一下,优先级的概念

这‘ ( ) ’,‘ [ ] ’, ' * ' 三个标识符在语句中的优先级是  ' ( ) ' > ' [ ] ' > ' * ' 

接下来正式介绍数组指针与指针数组——

      数组指针的本质是一个指向数组的指针;

      指针数组的本质是一个包含元素为一个个指针的数组;

1.数组指针

    数组有一维数组,二维数组,一般数组名可以被当作是指向数组首元素的地址。

而一维数组的数组指针形式以及应用如下

int a[5] = { 1,2,3,4,5 };
int* p = a;  //一维数组指针

cout << p << endl;
cout << a << endl;
cout << &a[0] << endl;  三者的结果其实都是数组 a 的首元素的地址


cout<< p[1] << endl;
cout<< a[1] << endl;    这两者的结果是一样的 —— 指针 p 可以代替数组名 a 的位置;

而二维数组,我们之前讲过,二维数组的元素是一个个一维数组,而结合一维数组的指针,那么二维数组的指针应该是可以指向每一个一维数组的首元素地址,那么二维数组的指针形式如下

int a[2][2] = { {1,2},{3,4} };

int(*p)[2] = a;  //二维数组指针


cout << p << endl;
cout << &a[0][0] << endl;   指针 p 指向的就是二维数组的首元素( a[0][0] )的地址。


cout<<p[1]<<endl;
cout<<&a[1]<<endl;   
cout<<&a[1][0]<<endl;       这三者都是a[1][0]的地址,也是第一行的首元素的地址。
cout<<p[2]<<endl                              得出来的是第二行的首元素的地址。




cout<<p[1][1]<<endl;
cout<<a[1][1]<<endl;   两者的结果也是一样的,  p 可以代替数组名a;
    

2.指针数组

在这里我们讲一下指针数组的格式,

 类型标识符 解引用符 数组名[ ]

int* p[5];    指针数组

int (*p)[5];  数组指针

注意 根据上文的优先级可以得知 :

    在指针数组中变量名 p 是先和‘ [ ] ’ 结合构成数组,而‘ * ’则是和   ‘ int ’联系,表明数组的元素类型为整形指针,最终构成一个指针数组。

    在数组指针中变量名 p 在‘( )’的作用下,先是和 ‘ * ’ 结合构成指针,之后在与 ' [ ] ' 结合构成数组指针。

     指针数组的实际操作如下

int a = 10;
int b = 5;

int* p[2] = {&a,&b};   指针数组


cout << p[1] << endl;  输出的是 a 的地址
cout << *p[1] << endl; 输出的是 10

标签:数组,int,元素,二维,一维,指针
From: https://blog.csdn.net/2302_80638085/article/details/140675627

相关文章

  • 函数与数组
    前言:今天我们来了解一下C语言中的函数。先来做一个猜数字游戏吧。要想猜数字,就必须产生随机数,那么我们如何利用C语言来产生随机数呢?接下来就让我们来学习产生随机数的几个函数吧。1rand函数.C语言提供了一个rand函数,可以产生随机数,但是rand函数产生的这个随机数是一个......
  • 数组作为函数参数进行传递
    1.整型数组        数组在传参时,传递的是数组的首元素地址,无法在函数中得知数组有多少个元素;因此在封装函数时在形参处不仅要传首元素地址,也要传元素个数。        又由于数组传递的是地址,因此数组可以通过形参修改实参的值;即传参中,可在被调函数中修改主调函......
  • C++自学笔记29(多维数组)
    我们在之前的笔记中知道数组解决了重复变量的赋值问题,也知道数组就是指针可以用指针的方式修改内容。现在有一个数组对50个变量赋值a[50],我们有50个这样的数组a[50][50],对于这样的数组我们还有50个a[50][50][50]。这就是一维数组、二维数组、三维数组......我们拿堆上建立......
  • LeetCode1005. K 次取反后最大化的数组和
    题目链接:https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/description/题目叙述:给你一个整数数组nums和一个整数k,按以下方法修改该数组:选择某个下标i并将nums[i]替换为-nums[i]。重复这个过程恰好k次。可以多次选择同一个下标i。以这种......
  • LeetCode面试150——189轮转数组
    题目难度:中等默认优化目标:最小化平均时间复杂度。Python默认为Python3。1题目描述给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数。示例1:输入:nums=[1,2,3,4,5,6,7],k=3输出:[5,6,7,1,2,3,4]解释:向右轮转1步:[7,1,2,3,4,5,6]......
  • 代码随想录二刷——数组
     ......
  • c语言-指针
    6指针一、指针是什么1、指针是地址(1)地址是什么?a. 内存中用于cpu标识的一组编号   --是以十六进制的形式存储的b.cpu要么是32位,要么是64位的地址针注:这里电脑是64位,而空间是16G,这是因为电脑还有内存条,一个内存条有8G,所以总共是16G。这里的RAM是动态内存,是正在使用......
  • 无法获取 curve_fit 的正确数据类型。例如:不可散列、具有序列的数组等
    我正在使用一个脚本来使用curve_fit分析nmr弛豫率,并从外部文件引入输入和输出值。当我实际尝试运行curve_fit时,我遇到了许多关于这些数据类型的错误消息,例如数据处于不可散列的类型、错误地将数组转换为序列、数据形状不同等。我修改了我的脚本确保它们具有相同的数据类型(......
  • Java入门到精通:第八课 数组
    一、数组概述1、数组的解释:可以存储同种数据类型的多个值的一种容器2、注意:(1)存储数据时,需要结合隐式转换:(2)建议:容器的类型,和存储的数据类型保持一致二、数组的定义1、格式:2、数组的静态初始化3、数组的动态初始化4、数组的静态初始化和数组的静态初始化的区别:......
  • 创建一个char类型的26个元素的数组,分别放置'A'-'Z'。
    publicclassshuzu03{//编写一个main方法publicstaticvoidmain(String[]args){/*创建一个char类型的26个元素的数组,分别放置'A'-'Z'。使用for循环访问所有元素并打印出来。提示:char类型数据运算'A'+1->'B'思路......