在运行时输入值以动态分配内存

时间:2018-10-04 17:16:56

标签: c++ arrays pointers dynamic-memory-allocation

以下是我编写的用于在运行时读取值以动态分配的内存的代码:

void main()
{
    clrscr();
    int *p = new int[5];
    int *a = new int();
    cin >> *a;   // **line 5**
    cout << *a << "\n"; //  **line 6**
    cout << &p;   // line 7
    cout << *p;    // line 8

    cout << "\nEnter 5 no for array\n";
    for (int i = 0; i <= 4; i++)
    {
        cout << &p[i] << "  :-  ";
        cin >> p[i];   // LINE 12
    }

    for (i = 0; i <= 4; i++)
        cout << "\n" << p[i];     // LINE 16

    delete[] p;
    delete a;
    getch();
}

我想知道,在为用户整数输入数据时,我们必须将*acincout配合使用,以便在第5和6行中输入数据数组,我们只在第12和16行中给了指针变量名称。有人可以告诉我为什么会有这种区别吗?

此外,还有谁能告诉我第7行和第8行的输出之间的区别。

1 个答案:

答案 0 :(得分:0)

您不必“必须”;您可能已经写过cin >> a[0]

对于内置类型和指针等,a[b]*(a+b)*(b+a)b[a],可以互换它们。

这是导致选择的唯一约定。通常,如果您分配了多个int,则将使用“数组符号”(a[i]);如果您仅分配了一个int,则将使用向上取消引用(*(a+0)*a)。

但是该语言并不真正在乎分配多少元素,因为无论哪种方式,您都只有一个指向“一个或多个”连续元素的指针。

tl; dr这就是语法的设计方式。

关于您的第二个问题,&p*p给出不同的结果,因为它们表示不同的含义,我将把这种区别作为练习供读者阅读。

相关问题