指针和指针数组之间的区别

时间:2013-03-21 04:50:03

标签: c++

我做了一个代码

#include <iostream>
#include<conio.h>
using namespace std;

void main()
{
    int *x,*y;
    x=new int[1];
    y=new int;
    cin>>y;   //Gives error probably because y is a pointer and not a variable
    cin>>*y                 //works fine
    cin>>x[0]>>x[1];
    cout<<x[0]<<x[1];
    cout<<*x[0];         //gives error
    cout<<y;
    cout<<*y;

    getch();

}

给出了错误。为什么?我记得我将x声明为指针数组,现在我和* y做了同样的事情。这是否意味着指针数组成为变量?plz help!

3 个答案:

答案 0 :(得分:1)

x是指向int的指针。您已经分配了一个int数组,这是一个int long。因此x [0]是int而* x是int。但是,* x [0]表示您说x [0]是您要解除引用的指针。但是,它不是指针,而是一个int。这就是出错的原因。

答案 1 :(得分:1)

您使用该行代码实际执行的操作类似于:

cout<<**x;

因为使用x[0]会取消引用0th的{​​{1}}元素。

正如您在x的定义中所看到的那样,x只是一个指针,而不是指向指针的指针,因此,因为您尝试取消引用变量,所以取消引用它两次将不起作用。

行:

x

实际上只是说“为这个指针分配一个int数组,大小为1”,这只会使x=new int[1]; 指向一个足以存储1 int的内存块。

答案 2 :(得分:1)

数组的含义:

x[0]

相当于*(x + 0);

如你所知,数组是数组,它的根目录只是指针。

因此任何具有x [a]或x [a] [b]的数组都可以扩展为

*(x+a) or *(*(x+a)+b)

基于此,我希望你找到答案。