我编写了以下代码来尝试理解我们如何使用指向数组的指针和对数组的引用。这是我对正在发生的事情的思考过程。
arr
与数组第一个元素的地址相同。*arr
和arr[0]
一样告诉我那个位置的 int 是什么。p
是一个指针,并被分配给arr
,这是第一个元素的地址。所以本质上*p
与*arr
相同,p[0]
与arr[0]
.- 在这里我不明白发生了什么。
arrPtr
是指向十个整数数组的指针。为什么*arrPtr
或arrPtr[0]
不给我值 9? arrRef
是对十个整数数组的引用,与上面的点不同*arrRef
或arrRef[0]
确实产生值9.
这是我的代码:
#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;
}
这是我的输出:
arr: 0xbf843e28
*arr: 9
arr[0]: 9
p: 0xbf843e28
*p: 9
p[0]: 9
arrPtr: 0xbf843e28
*arrPtr: 0xbf843e28
arrPtr[0]: 0xbf843e28
arrRef: 0xbf843e28
*arrRef: 9
arrRef[0]: 9
最佳答案
*arrPtr
或 arrPtr[0]
产生 int[10]
类型的对象
用于 operator <<
数组被显式转换为 int *
类型的指针和重载的operator <<
对于 const void *
的参数为这样的表达式选择。
可以看到这些输出
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;
关于c++ - 指向整数数组的指针 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42457364/