C++ 指针数组

C++ 指针数组 首页 / C++入门教程 / C++ 指针数组

数组和指针彼此密切相关。在C++中,数组的名称被视为"指针",即,数组的名称包含元素的地址。 C++将数组名称视为第一个元素的地址。例如,如果我们创建一个数组,即保存20个整数类型值的marks,则marks将包含第一个元素的地址,即Marks [0]。因此,我们可以说数组名称(标记)是一个指针,它保存着数组第一个元素的地址。

让我们通过示例了解这种情况。

#include <iostream>
using namespace std;
int main()
{
    int *ptr; //整数指针声明
    int marks[10];//标记数组声明
    std::cout << "Enter the elements of an array :" << std::endl;
    for(int i=0;i<10;i++)
    {
        cin>>marks[i];
    }
    ptr=marks;//标记和 ptr 都指向同一个元素..
    std::cout << "The value of *ptr is :" <<*ptr<< std::endl;
    std::cout << "The value of *marks is :" <<*marks<<std::endl;
}

在上面的代码中,我们声明了一个整数指针和一个整数类型的数组。我们使用语句ptr = marks将标记的地址分配给ptr;这意味着变量"marks"和" ptr"都指向同一个元素,即标记[0]。当我们尝试打印* ptr和* mark的值时,结果是一样的。因此,证明了数组名称存储了数组的第一个元素的地址。

链接:https://www.learnfk.comhttps://www.learnfk.com/c++/cpp-array-of-pointers.html

来源:LearnFk无涯教程网

输出

C++ 指针数组

指针数组

指针数组是由指针类型的变量组成的数组,这意味着变量是指向其他元素的指针。假设我们创建一个包含5个整数指针的指针数组;那么声明将如下所示:

int *ptr[5];        //5 个整数指针的数组。

在上面的声明中,我们声明了一个名为ptr的指针数组,它在内存中分配了5个整数指针。

指针数组的元素也可以通过分配其他元素的地址来初始化。让我们通过一个例子来观察这种情况。

int a;//变量声明。
ptr[2] = &a;  

在上面的代码中,我们将变量" a"的地址分配给数组" ptr"的第三个元素。

我们还可以通过取消引用指针来检索" a"的值。

*ptr[2];

通过示例让我们理解。

#include <iostream>
using namespace std;
int main()
{
    int ptr1[5];//整数数组声明
    int *ptr2[5];//指针声明的整数数组
    std::cout << "Enter five numbers :" << std::endl;
    for(int i=0;i<5;i++)
    {
        std::cin >> ptr1[i];
    }
    for(int i=0;i<5;i++)
    {
        ptr2[i]=&ptr1[i]; 
    }
    //打印 ptr1 数组的值
    std::cout << "The values are" << std::endl;
    for(int i=0;i<5;i++)
    {
        std::cout << *ptr2[i] << std::endl;
    }
}

在上面的代码中,我们声明了一个整数类型的数组和一个整数指针的数组。我们定义了" for"循环,该循环遍历数组" ptr1"的元素,并且在每次迭代中,索引为" i"的ptr1元素的地址都存储在索引为" i"的ptr2中。

输出

C++ 指针数组

到现在为止,我们已经了解了指向整数的指针数组。现在,我们将看到如何创建指向字符串的指针数组。

指向字符串的指针数组

字符串指针数组是一个字符指针数组,其中包含一个字符串的第一个字符的地址,或者我们可以说一个字符串的基地址。

以下是指向字符串的指针数组和二维字符数组之间的区别:

无涯教程网

  • 在内存消耗的情况下,指向字符串的指针数组比使用二维字符数组更有效率,因为指向字符串的指针数组比使用二维字符数组存储字符串要消耗更少的内存。
  • 在指针数组中,与2d数组相比,对字符串的操作相对容易。我们还可以使用指针轻松地更改字符串的位置。

让我们看看如何声明指向字符串的指针数组。

首先,我们声明指向字符串的指针数组:

char *names[5] = {"john",
                  "Peter",
                  "Marco",
                  "Devin",
                  "Ronan"};

在上面的代码中,我们将指针名称数组声明为大小为5的"names"。在上述情况下,我们已经在声明时进行了初始化,因此我们无需提及a数组的大小。指针。上面的代码可以重写为:

char *names[ ] = {"john",
                  "Peter",
                  "Marco",
                  "Devin",
                  "Ronan"};

在上述情况下,"names"数组的每个元素都是字符串文字,并且每个字符串文字都将保存字符串第一个字符的基地址。例如,names [0]包含" john"的基地址,names [1]包含" Peter"的基地址,依此类推。不能保证所有字符串文字都存储在连续的存储位置中,但是字符串的字符存储在连续的存储位置中。

让我们创建一个简单的示例。

#include <iostream>
using namespace std;
int main()
{
  char *names[5] = {"john",
                    "Peter",
                    "Marco",
                    "Devin",
                    "Ronan"};
    for(int i=0;i<5;i++)
    {
        std::cout << names[i] << std::endl;
    }
    return 0;
}

在上面的代码中,我们声明了一个char指针数组,其中包含5个字符串文字,并且每个字符串的第一个字符都包含该字符串的基地址。

C++ 指针数组

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

人工智能基础课 -〔王天一〕

JavaScript核心原理解析 -〔周爱民〕

说透敏捷 -〔宋宁〕

SRE实战手册 -〔赵成〕

WebAssembly入门课 -〔于航〕

云原生架构与GitOps实战 -〔王炜〕

深入拆解消息队列47讲 -〔许文强〕

结构执行力 -〔李忠秋〕

AI大模型系统实战 -〔Tyler〕

好记忆不如烂笔头。留下您的足迹吧 :)