我做了一个代码
#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!
答案 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)
基于此,我希望你找到答案。