亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C++ 指针和数组

C++ 指针和数组

在本教程中,我们将通过示例了解数组和指针之间的关系。

在 C++ 中,指针是保存其他变量地址的变量。指针不仅可以存储单个变量的地址,还可以存储数组单元格的地址。

考虑这个例子:

int *ptr;
int arr[5];

// store the address of the first
// element of arr in ptr
ptr = arr;

这里,ptr 是一个指针变量,而 arr 是一个 int 大批。代码ptr = arr; 将数组的第一个元素的地址存储在变量 ptr 中 .

请注意,我们使用了 arr 而不是 &arr[0] .这是因为两者是相同的。所以,下面的代码和上面的代码是一样的。

int *ptr;
int arr[5];
ptr = &arr[0];

其余数组元素的地址由 &arr[1] 给出 , &arr[2] , &arr[3] , 和 &arr[4] .


指向每个数组元素

假设我们需要使用相同的指针 ptr 指向数组的第四个元素 .

在这里,如果 ptr 指向上例中的第一个元素,然后是 ptr + 3 将指向第四个元素。例如,

int *ptr;
int arr[5];
ptr = arr;

ptr + 1 is equivalent to &arr[1];
ptr + 2 is equivalent to &arr[2];
ptr + 3 is equivalent to &arr[3];
ptr + 4 is equivalent to &arr[4];

同样,我们可以使用单个指针访问元素。例如,

// use dereference operator
*ptr == arr[0];
*(ptr + 1) is equivalent to arr[1];
*(ptr + 2) is equivalent to arr[2];
*(ptr + 3) is equivalent to arr[3];
*(ptr + 4) is equivalent to arr[4];

假设我们已经初始化了 ptr = &arr[2]; 那么

ptr - 2 is equivalent to &arr[0];
ptr - 1 is equivalent to &arr[1]; 
ptr + 1 is equivalent to &arr[3];
ptr + 2 is equivalent to &arr[4];
<图>

注意: ptr 之间的地址 和 ptr + 1 相差 4 个字节。这是因为 ptr 是一个指向 int 的指针 数据。并且,在 64 位操作系统中,int 的大小为 4 个字节。

同样,如果指针 ptr 指向 char 输入数据,然后是 ptr 之间的地址 和 ptr + 1 是 1 个字节。这是因为一个字符的大小是1个字节。


示例 1:C++ 指针和数组

// C++ Program to display address of each element of an array 

#include <iostream>
using namespace std;

int main()
{
    float arr[3];

    // declare pointer variable
    float *ptr;
    
    cout << "Displaying address using arrays: " << endl;

    // use for loop to print addresses of all array elements
    for (int i = 0; i < 3; ++i)
    {
        cout << "&arr[" << i << "] = " << &arr[i] << endl;
    }

    // ptr = &arr[0]
    ptr = arr;

    cout<<"\nDisplaying address using pointers: "<< endl;

    // use for loop to print addresses of all array elements
    // using pointer notation
    for (int i = 0; i < 3; ++i)
    {
        cout << "ptr + " << i << " = "<< ptr + i << endl;
    }

    return 0;
}

输出

Displaying address using arrays: 
&arr[0] = 0x61fef0
&arr[1] = 0x61fef4
&arr[2] = 0x61fef8

Displaying address using pointers: 
ptr + 0 = 0x61fef0
ptr + 1 = 0x61fef4
ptr + 2 = 0x61fef8

在上面的程序中,我们首先简单地打印了数组元素的地址,没有使用指针变量ptr .

然后,我们使用指针 ptr 指向 a[0] 的地址 , ptr + 1 指向 a[1] 的地址 ,等等。


在大多数情况下,数组名称衰减为指针。简单来说,数组名称被转换为指针。这就是为什么我们可以使用指针来访问数组元素的原因。

但是,我们应该记住,指针和数组是不一样的。

在少数情况下,数组名称不会衰减为指针。了解更多,请访问:数组名何时不衰减为指针?


示例2:数组名用作指针

// C++ Program to insert and display data entered by using pointer notation.

#include <iostream>
using namespace std;

int main() {
    float arr[5];
    
   // Insert data using pointer notation
    cout << "Enter 5 numbers: ";
    for (int i = 0; i < 5; ++i) {

        // store input number in arr[i]
        cin >> *(arr + i) ;

    }

    // Display data using pointer notation
    cout << "Displaying data: " << endl;
    for (int i = 0; i < 5; ++i) {

        // display value of arr[i]
        cout << *(arr + i) << endl ;

    }

    return 0;
}

输出

Enter 5 numbers: 2.5
3.5
4.5
5
2
Displaying data: 
2.5
3.5
4.5
5
2

在这里,

  1. 我们首先使用指针表示法将用户输入的数字存储到数组 arr .

    cin >> *(arr + i) ;

    这段代码等价于下面的代码:

    cin >> arr[i];

    请注意,我们没有声明单独的指针变量,而是使用数组名称 arr 用于指针符号。

    我们已经知道,数组名 arr 指向数组的第一个元素。所以,我们可以想到 arr 就像一个指针一样。

  2. 同样,我们随后使用 for 循环显示 arr 的值 使用指针表示法。

    cout << *(arr + i) << endl ;

    这段代码相当于

    cout << arr[i] << endl ;

C语言

  1. C++ 变量、文字和常量
  2. C++ 类和对象
  3. C++ 内存管理:新建和删除
  4. C++ 公共、受保护和私有继承
  5. C++朋友函数和朋友类
  6. C 指针
  7. 数组和指针的关系
  8. C 传递地址和指针
  9. C 结构体和指针
  10. C++ 中的结构和类
  11. C++ 中的数组 |声明 |初始化 |指向数组示例的指针
  12. 带有示例的 C++ 指针