C++ 中的向量指针

高造擎*_*高造擎 -1 c++ arrays struct vector

我有一个向量存储结构,并通过地址将其传递给函数。我想知道为什么我只能通过编写来访问元素

(*v)[0].value
Run Code Online (Sandbox Code Playgroud)

代替

v[0].value
Run Code Online (Sandbox Code Playgroud)

当我使用结构数组并通过地址将其传递给函数时,我可以简单地写

v[0].value 获取元素的值。欢迎任何解释并提前致谢。

Hol*_*Cat 5

您正在将指向数组第一个元素的指针与指向整个向量的指针进行比较。

让我们尝试创建一个指向整个数组而不是第一个元素的指针:

int a[3] = {1,2,3};
int (*ap)[3] = &a;
// int v1 = ap[0]; // error
int v2 = (*ap)[0]; // ok
Run Code Online (Sandbox Code Playgroud)

这与指向向量的指针的行为完全相同:

std::vector<int> b = {1,2,3};
std::vector<int> *bp = &b;
// int v3 = bp[0]; // error
int v4 = (*bp)[0]; // ok
Run Code Online (Sandbox Code Playgroud)

或者,相反,让我们创建一个指向向量第一个元素的指针:

std::vector<int> c = {1,2,3};
int *cp = c.data(); // or `&c[0]`
int v5 = cp[0]; // ok
Run Code Online (Sandbox Code Playgroud)

这类似于指向数组第一个元素的指针:

int d[3] = {1,2,3};
int *dp = d; // or `&d[0]`
int v6 = dp[0]; // ok
Run Code Online (Sandbox Code Playgroud)