首页 > 其他分享 >使用数组的指针

使用数组的指针

时间:2023-02-18 12:34:30浏览次数:32  
标签:指向 int pArray 数组 使用 Array 指针

您还可以创建指向数组的指针,这是按如下方式完成的

int *pArray;
pArray = new int[6];

这将创建一个指针,pArray,并使其指向一个包含六个元素的数组。另一种不使用动态内存分配的方法如下:

int *pArray;
int MyArray[6];
pArray = &MyArray[0];

请注意,您可以简单地编写 MyArray 而不是编写 &MyArray[0]。 当然,这仅适用于数组,并且是它们在 C/C++ 语言中的实现方式的结果。 一个常见的陷阱是写 pArray = &MyArray;,但这是不正确的。 如果你这样写,你最终会得到一个指向数组指针的指针(没有错字),这肯定不是你想要的。
有了指向数组的指针后,如何使用它? 好吧,假设你有一个指向数组的指针 int。 指针最初将指向数组中的第一个值,如以下示例所示:

#include <stdio.h>

void main()
{
    int Array[3];
    Array[0] = 10;
    Array[1] = 20;
    Array[2] = 30;

    int *pArray;
    pArray = &Array[0];

    printf("pArray points to the value %d\n", *pArray);
}

为了使指针移动到数组中的下一个值,我们可以说 pArray++. 我们也可以,正如你们中的一些人现在可能已经猜到的那样,说 pArray + 2,这会将数组指针移动两个元素。 需要注意的是,您知道数组的上限是多少(本例中为 3),因为当您使用指针时,编译器无法检查您是否没有越过数组的末尾。 您很容易以这种方式最终导致系统崩溃。 这又是一个例子,这次显示了我们设置的三个值:

#include <stdio.h>

void main()
{
    int Array[3];
    Array[0] = 10;
    Array[1] = 20;
    Array[2] = 30;

    int *pArray;
    pArray = &Array[0];

    printf("pArray points to the value %d\n", *pArray);
    pArray++;
    printf("pArray points to the value %d\n", *pArray);
    pArray++;
    printf("pArray points to the value %d\n", *pArray);
}

您还可以减去值,因此 pArray - 2 是 pArray 当前指向的位置的 2 个元素。 但是,请确保您对指针进行加减操作,而不是对其值进行加减操作。 这种使用指针和数组的操作在循环中使用时最有用,例如 for或者 while循环。

另请注意,如果您有一个指向值的指针,例如 int* pNumberSet,你可以把它当作一个数组。 例如, pNumberSet[0]相当于 *pNumberSet; 相似地, pNumberSet[1]相当于 *(pNumberSet + 1).

对于数组的最后一个警告是,如果您使用 new,如以下示例所示:

int *pArray;
pArray = new int[6];

必须用以下方式删除它

delete[] pArray;

注意删除后的 [] 。 这告诉编译器它正在删除整个数组,而不仅仅是单个项目。 只要涉及数组,就必须使用此方法; 否则,您将以内存泄漏告终。

标签:指向,int,pArray,数组,使用,Array,指针
From: https://www.cnblogs.com/wozhuyinghao/p/17132331.html

相关文章

  • Linux系统之使用autofs自动挂载nfs共享
    (Linux系统之使用autofs自动挂载nfs共享)一、autofs介绍Autofs是一项可自动挂载相应文件系统的客户端服务,可用于nfs共享的自动挂载,无需手动mount挂载,方便日常使用。二......
  • 指向类的指针
    还有一些关于指针的其他注意事项,其中之一是结构或类。你可以定义一个类如下:classMyClass{public:intm_Number;charm_Character;};然后,您可以定义一个......
  • 将指针传递给函数
    将指针传递给函数的能力非常有用,但也很容易掌握。如果我们要编写一个程序,接受一个数字并将其加五,我们可能会编写如下内容:#include<stdio.h>voidAddFive(intNumber)......
  • 使用 upgrade-assistant 升级Framework项目到.NET
    只在VS2022有效首先安装扩展包 upgrade-assistant重启后打开netframework项目,并在VS中切换到终端切换到当前项目的文件夹运行升级命令、根据条件进行选择就行......
  • day05数组
    day05数组数据结构(存储结构,逻辑结构)概述:只要能存储数据的就是数据结构存储结构顺序存储结构(查找的时候,数据越多,时间复杂度越高)链式存储结构索引存储结......
  • C语言填空:利用指针形成逆序字符串函数
    #include<stdio.h>【1】//逆序输出任意字符串voidseverse_string(char【2】str){intlen=strlen(str);char*left=str;char*right=str+le......
  • 使用Docker启动并运行Flask应用
    (一)拉取Python镜像dockerpullpython#查看当前主机中存在的镜像dockerimages(二)编写flask应用1.创建一个目录mkdirflask_demo#进入目录中cdflask_de......
  • C语言填空:利用数组形成逆序字符串的函数,不用指针
    #include<stdio.h>【1】//逆序输出任意字符串voidseverse_string(chararr【2】){intlen=strlen(arr);intleft=0;intright=len-1;......
  • 使用Animate.css制作超炫的CSS3动画
    Animate.css是一个超强的CSS3动画库,它使用简单,只需要将相关效果对应的class加入页面元素中,就能实现翻转、滑动、旋转等等复杂超炫的跨浏览器的动画效果,它让开发这制作页面动......
  • 指针,动态内存的例子
    #include<stdio.h>int*pPointer;voidSomeFunction();{intnNumber;nNumber=25;//makepPointerpointtonNumber:pPointer=&nNumb......