繁体   English   中英

数组指针 c++

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM