数组是否被称为隐式指针

时间:2012-01-19 02:41:59

标签: c++ c arrays pointers

  

可能重复:
  Is array name a pointer in C?
  How do I use arrays in C++?

以下程序显示数组和指针的相同属性...数组元素是否与pinters有某种关系?

#include <iostream>
using namespace std;
int main(){
    int a[3];
    for(int i=0;i<3;i++){
        cin>>*(a+i);
        cout<<*(a+1);
    }
    return 0;
} 

4 个答案:

答案 0 :(得分:4)

C FAQ回答了许多关于数组和指针的常见问题,并且数组不是指针,但有一些神奇的东西让它们看起来像指针...

http://c-faq.com/aryptr/index.html

答案 1 :(得分:0)

在C(和C ++)中,您可以向数组添加(或子)索引,并获取该成员的地址。 您也可以使用该数组,因为它是指向其第一个成员的指针。看到那段代码:

int a[5]={0,1,2,3,4};
int *p=a;
printf("%d %d\n",a[3],p[3]); //should print 3 3
printf("%p %p %p\n",p+3,a+3,&a[3]); //should print the same address 3 times.

答案 2 :(得分:0)

指针是一个变量,它包含数组元素的地址。以这种方式,它“指向”该数组(到数组的元素或数组的开头)。您在此代码中使用的是计算某个元素的地址,然后取消引用该地址。 实际上,代码

*(a+i) // this is the value of the element with address a+i
       // here a - is a pointer to beginning of array "a"
       // a+i - is an address of particular element

相当于

a[i]

答案 3 :(得分:-4)

是。数组和指针是相关的。没有方括号的数组名称(在您的示例中为a)具有数组基址的地址或数组的第0个元素。所以它实际上是一个指针。正常的指针添加也适用于它。例如 -

int arr[10];
cout<<"Address of the 0th element = " <<arr;
cout<<"Value of the 0th element = "<<*arr;      //arr is a pointer here
arr=arr+1;//arr now points to the 1st element of the array,