指向int的数组c ++

时间:2017-02-25 14:34:57

标签: c++ arrays pointers reference

我编写了以下代码,试图了解如何使用指向数组和数组引用的指针。这是我对正在发生的事情的思考过程。

  1. public void configButtonCount() { List<WebElement> buttons = driver.findElements(By.cssSelector("div.config-category li")); System.out.println("List size is: " + buttons.size()); } 与数组的第一个元素的地址相同。 arr*arr提供了该位置的int。
  2. arr[0]是一个指针,并被赋予p,这是第一个元素的地址。因此,arr本质上与*p相同,*arrp[0]相同。
  3. 这里我不明白发生了什么。 arr[0]是指向十个整数数组的指针。为什么没有arrPtr*arrPtr给我9的价值?
  4. arrPtr[0]是对十个整数数组的引用,与上面的arrRef*arrRef不同,它会产生值9.
  5. 这是我的代码:

    arrRef[0]

    这是我的输出:

    #include <iostream>
    
    using std::cin;
    using std::cout;
    using std::endl;
    
    int main() {
        int arr[10] = {9, 18, 31, 40, 42};
        cout << "arr: " << arr << endl;
        cout << "*arr: " << *arr << endl;
        cout << "arr[0]: " << arr[0] << endl;
        cout << endl;
    
        int *p = arr;
        cout << "p: " << p << endl;
        cout << "*p: " << *p << endl;
        cout << "p[0]: " << p[0] << endl;
        cout << endl;
    
        int (*arrPtr)[10] = &arr;
        cout << "arrPtr: " << arrPtr << endl;
        cout << "*arrPtr: " << *arrPtr << endl;
        cout << "arrPtr[0]: " << arrPtr[0] << endl;
        cout << endl;
    
        int (&arrRef)[10] = arr;
        cout << "arrRef: " << arrRef << endl;
        cout << "*arrRef: " << *arrRef << endl;
        cout << "arrRef[0]: " << arrRef[0] << endl;
    }
    

1 个答案:

答案 0 :(得分:7)

*arrPtrarrPtr[0]会产生int[10]

类型的对象

operator <<中使用,数组显式转换为int *类型的指针,并为这样的表达式选择operator <<参数的重载const void *。 / p>

您可以看到这些输出

arr: 0xbf843e28

*arrPtr: 0xbf843e28
arrPtr[0]: 0xbf843e28

重合。

如果要输出数组的第一个元素,则应编写

std::cout << **arrPtr << std::endl;
std::cout << ( *arrPtr )[0] << std::endl;
std::cout << arrPtr[0][0] << std::endl;
std::cout << *arrPtr[0] << std::endl;

为了更清楚,你可以引入一种参考方式

int ( &arrRef )[10] = *arrPtr;

然后写

std::cout << *arrRef << std::endl;
std::cout << arrRef[0] << std::endl;