📜  在 C++ 中创建指针数组

📅  最后修改于: 2022-05-13 01:54:44.245000             🧑  作者: Mango

在 C++ 中创建指针数组

指针数组是指针变量数组。它也被称为指针数组。我们将讨论如何动态创建一维和二维指针数组。动态一词表示内存是在运行时分配的,它在 Heap Section 中分配内存。在堆栈中,内存是有限的,但取决于使用的语言/操作系统,平均大小为1MB

C++ 中的动态一维数组:指针数组是一种由指针类型的变量组成的数组。这意味着这些变量可以指向其他一些数组元素。

例子:

在大小为 N的动态分配数组中,块在堆中创建并返回第一个内存块的地址。通过使用该地址,可以访问每个元素。 C++中的动态数组大家应该熟悉new关键字或者malloc(),calloc()都可以使用。

句法:

例子:

一维数组

访问动态数组的元素:

  • 1. 创建大小为 N (= 5) 的一维数组,并将基地址分配给变量P 。如果编写以下语句,则输出为1000
  • 如果需要第 1000地址中的值,则使用 *(星号)符号取消引用它,如下所示:

基本指针运算:以下是有关指针运算的一些要点:

  • *(P + 1):
  • *(P) + 1:

下面是用于说明上述概念的 C++ 程序:

C++
// C++ program to illustrate the concepts
// of creating 1D array of pointers
#include 
using namespace std;
 
// Driver Code
int main()
{
    // Dynamically creating the array
    // of size = 5
    int* p = new int[5];
 
    // Initialize the array p[] as
    // {10, 20, 30, 40, 50}
    for (int i = 0; i < 5; i++) {
        p[i] = 10 * (i + 1);
    }
 
    // Print the values using pointers
    cout << *p << endl;
    cout << *p + 1 << endl;
    cout << *(p + 1) << endl;
    cout << 2 [p] << endl;
    cout << p[2] << endl;
    *p++;
 
    // Pointing to next location
    cout << *p;
 
    return 0;
}


C++
// C++ program to illustrate the concepts
// of creating 2-D array of pointers
#include 
using namespace std;
 
// Driver Code
int main()
{
    int N = 3;
 
    // Creating the array of pointers
    // of size N
    int** p = new int*[N];
    int x = 1;
 
    // For multiplying
    for (int i = 0; i < N; i++) {
 
        p[i] = new int[N];
 
        // Creating N sized int memory
        // block
        for (int j = 0; j < N; j++, x++) {
 
            p[i][j] = 10 * x;
 
            // The above statement can
            // also be written as:
            // *(*(p+i)+j) = 10 * x
        }
    }
 
    // Print the values using pointers
    cout << *p << endl;
    cout << **p << endl;
    cout << *p + 1 << endl;
    cout << **p + 1 << endl;
    cout << *(*(p + 1) + 0) << endl;
    cout << p[2][2] << endl;
 
    return 0;
}


输出
10
11
20
30
30
20

C++ 中的动态二维指针数组:动态指针数组基本上是一个指针数组,其中每个数组索引都指向一个内存块。这代表了我们脑海中的二维视图。但从逻辑上讲,它是一个连续的内存块。

句法:

例子:

注意: *(星号)符号定义了指针的级别,一个*表示一级指针,其中**表示两级指针,以此类推。此外,指针的级别必须与您要动态创建的维数组相同。

方法:

  • 创建一个一维指针数组。

一维数组

  • 现在,将列创建为每行的指针数组,如下所示:
    • P[0] = 新整数 [3];
    • P[1] = 新整数 [3];
    • P[2] = 新整数 [3];
    • P[3] = 新整数 [3];

创建列

  • 一维指针数组指向一个内存块(提到了大小)。基本上, P[0], ..., P[3]指向一维整数数组。

访问数组元素

  • *P等于P[0]这是第一行第一列的地址是&P[0][0] = 3000
  • *(P + 1)等于 ' P ' is 1000 + 1(sizeof int) = 1004并且*表示取消引用。所以存储在地址处的值被打印出来,即*1004 = 4000。
  • *(P + 1) + 2与上述情况相同,但+2表示(&P[1] + 2)等于&P[1] [2] = 4008
  • *(*(P + 1) + 2)与上述情况相同,但第一个星号'*(....)'表示取消引用该地址。因此,结果等于&P[1][2] = *(4008) = 54 中的值

下面是用于说明上述概念的 C++ 程序:

C++

// C++ program to illustrate the concepts
// of creating 2-D array of pointers
#include 
using namespace std;
 
// Driver Code
int main()
{
    int N = 3;
 
    // Creating the array of pointers
    // of size N
    int** p = new int*[N];
    int x = 1;
 
    // For multiplying
    for (int i = 0; i < N; i++) {
 
        p[i] = new int[N];
 
        // Creating N sized int memory
        // block
        for (int j = 0; j < N; j++, x++) {
 
            p[i][j] = 10 * x;
 
            // The above statement can
            // also be written as:
            // *(*(p+i)+j) = 10 * x
        }
    }
 
    // Print the values using pointers
    cout << *p << endl;
    cout << **p << endl;
    cout << *p + 1 << endl;
    cout << **p + 1 << endl;
    cout << *(*(p + 1) + 0) << endl;
    cout << p[2][2] << endl;
 
    return 0;
}
输出
0x158de90
10
0x158de94
11
40
90
想要从精选的视频和练习题中学习,请查看C++ 基础课程,从基础到高级 C++ 和C++ STL 课程,了解基础加 STL。要完成从学习语言到 DS Algo 等的准备工作,请参阅完整的面试准备课程