📜  C++中访问数组元素的不同方式

📅  最后修改于: 2021-09-03 03:10:43             🧑  作者: Mango

在本文中,下面讨论了从数组而不是传统的 arr[i]表达式访问元素的两种独特且不同的方法。

  • 使用指针*(arr+1)
  • 使用一些操作i[arr]来使用数组及其背后的原因。

编译 C++ 程序时,会同时生成符号表。它的形成是为了存储程序中使用的所有变量的地址的对应值。

让我们考虑一个 C++ 程序,看看相应程序的符号表是什么:

C++
// C++ program for the above concepts
 
#include 
using namespace std;
 
// Driver Code
int main()
{
    // Assigning a value to a
    int a = 5;
 
    // Printing the value of a
    cout << "Value of a: " << a;
 
    // Printing the address of a
    cout << "\nAddress of a: " << &a;
 
    return 0;
}


C++
// C++ program to demonstrate the
// above approach
#include 
using namespace std;
 
// Driver Code
int main()
{
    int arr[10];
 
    // Conventional method
    // for(int i = 0; i<10; i++)
    //{
    // arr[i] = i+1;
    //}
 
    // Pointer Method
    for (int i = 0; i < 10; i++) {
        *(arr + i) = i + 1;
    }
 
    cout << "Values : ";
 
    for (int i = 0; i < 10; i++) {
        cout << *(arr + i) << ' ';
    }
 
    return 0;
}


C++
// C++ program to demonstrate the
// above approach
#include 
using namespace std;
 
// Driver Code
int main()
{
    int arr[10];
 
    // Conventional method
    // for(int i = 0; i<10; i++)
    //{
    // arr[i] = i+1;
    //}
 
    // Method 2
    for (int i = 0; i < 10; i++) {
        i[arr] = i + 1;
    }
 
    cout << "Values: ";
 
    for (int i = 0; i < 10; i++) {
        cout << i[arr] << ' ';
    }
 
    return 0;
}


输出:
Value of a: 5
Address of a: 0x7ffe25768fa4

上面程序的符号表是这样的:

Variable Name

Address 

Value

 a

0x7ffe58e7cc4

5

所以,从符号表可以看出,每个变量都被分配了一个地址。因此,当数组被初始化时,它也会得到一些地址。在表中,数组以指向第一个元素的指针的形式存储。

例子:

int a[10]; 
gets stored like:
*(a) - which points to the first element.
*(a+1) - which points to second element.
Similarly we can have the last element pointed by *(a+(n-1)) we have (n-1) as arrays in C++ have zero based indexing

使用这个概念让我们讨论访问数组的第一种方法 –

使用指针的概念

下面是实现上述概念的 C++ 程序:

C++

// C++ program to demonstrate the
// above approach
#include 
using namespace std;
 
// Driver Code
int main()
{
    int arr[10];
 
    // Conventional method
    // for(int i = 0; i<10; i++)
    //{
    // arr[i] = i+1;
    //}
 
    // Pointer Method
    for (int i = 0; i < 10; i++) {
        *(arr + i) = i + 1;
    }
 
    cout << "Values : ";
 
    for (int i = 0; i < 10; i++) {
        cout << *(arr + i) << ' ';
    }
 
    return 0;
}
输出:
Values : 1 2 3 4 5 6 7 8 9 10

有趣的方法

正如所观察到的,数组可以用作*(arr) 。因此,可以说:

下面是实现上述概念的 C++ 程序:

C++

// C++ program to demonstrate the
// above approach
#include 
using namespace std;
 
// Driver Code
int main()
{
    int arr[10];
 
    // Conventional method
    // for(int i = 0; i<10; i++)
    //{
    // arr[i] = i+1;
    //}
 
    // Method 2
    for (int i = 0; i < 10; i++) {
        i[arr] = i + 1;
    }
 
    cout << "Values: ";
 
    for (int i = 0; i < 10; i++) {
        cout << i[arr] << ' ';
    }
 
    return 0;
}
输出:
Values: 1 2 3 4 5 6 7 8 9 10
想要从精选的视频和练习题中学习,请查看C++ 基础课程,从基础到高级 C++ 和C++ STL 课程,了解基础加 STL。要完成从学习语言到 DS Algo 等的准备工作,请参阅完整的面试准备课程