[英]Array pointer c++
你好,我想知道它是怎么做的。 我有這樣的代碼:
int tab[] = {1,2,3};
int* p;
p = tab;
cout <<p<<endl; // cout adress here
cout <<p[0]<<endl; // cout first element of the array
p
是如何存儲第一個元素的地址但p[0]
已經存儲了第一個元素? 它像p[0] = *p
一樣工作? 和p[1]
像p[1] = *(p+1)
一樣工作? 我知道如何使用它,但我有點困惑,因為我不太明白
p 是如何存儲第一個元素的地址的
p
是一個指針。 指針存儲地址。
但是 p[0] 已經存儲了第一個元素?
p[0]
是數組的一個元素。 它存儲一個 integer。
程序可以同時存儲這兩者。
它的工作方式類似於 p[0] = *p? p[1] 的工作方式類似於 p[1] = *(p+1)?
正確的。 這就是下標運算符在指針和 integer 上的工作方式。
p
是如何存儲第一個元素的地址的
數據類型int tab[]
與int*
相同, p
的類型也是如此。 所以這兩個變量都指向相同的 memory 位置,這將是數組的開始。
但是
p[0]
已經存儲了第一個元素?
變量tab
包含指向tab[0]
的第一個元素的指針,因此將相同的值分配給另一個變量將具有等效的效果。
它的工作方式類似於
p[0] = *p?
和p[1]
像p[1] = *(p+1)
一樣工作?
是的, *(p+i)
與p[i]
相同。
如果您需要詳細說明,請查看此鏈接
指針 p 指向數組的第一個變量,並且由於數組具有 memory 的連續分配,所以在 *(p+1) 上它開始指向數組的第二個變量。 你可以通過進一步的例子來理解這一點。
#include <iostream>
using namespace std;
int main()
{
// Pointer to an integer
int *p;
// Pointer to an array of 5 integers
int (*ptr)[5];
int arr[5];
// Points to 0th element of the arr.
p = arr;
// Points to the whole array arr.
ptr = &arr;
cout << "p =" << p <<", ptr = "<< ptr<< endl;
p++;
ptr++;
cout << "p =" << p <<", ptr = "<< ptr<< endl;
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.