[英]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.