2

我做了一个代码

#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 相同的操作。这是否意味着指针数组成为变量?请帮助!

4

3 回答 3

1

x 是一个指向 int 的指针。您已经分配了一个整数数组,它是一个长整数。因此 x[0] 是一个 int 并且 *x 是一个 int。但是, *x[0] 意味着您说 x[0] 是您要取消引用的指针。但是,它不是指针,而是 int。这就是为什么会出现错误。

于 2013-03-21T04:54:59.923 回答
1

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

cout<<**x;

因为 usingx[0]将取消0th引用x.

正如您的定义所看到的,x,x只是一个指针,而不是指向指针的指针,因此由于您试图取消引用变量,因此两次取消引用它是行不通的。

什么线:

x=new int[1];

实际上所做的只是说“为这个指针分配一个大小为 1 的整数数组”,这只会x指向一个足够大以存储 1 个整数的内存块。

于 2013-03-21T04:55:34.350 回答
1

数组的含义:

x[0]

等价于 *(x+0);

如您所知,数组就是数组,只不过是根中的指针。

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

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

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

于 2013-03-21T04:58:42.567 回答