【问题标题】:Entering value to dynamically allocated memory at runtime在运行时为动态分配的内存输入值
【发布时间】:2018-10-04 17:16:55
【问题描述】:

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

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 行的输出之间的区别。

【问题讨论】:

  • 如果有帮助,p[i]*(p + i)
  • 您的问题听起来好像您不了解指针的工作原理。指针指向变量或位置,在内存中,& 运算符获取指针的地址,* 取消引用指针以获取存储在指针地址中的值。因此,当您 cin>>*a 时,您正在将某些内容读入 a 的值。当您 cin>>7a 时,您正在阅读 a 的地址。希望这可以帮助您看到差异。>>>>>>>>>>>>>>>>>>>> 所以第 7 行和第 8 行的区别在于您在第 7 行输出地址并输出值存储在第 8 行。
  • 每个问题一个问题

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


【解决方案1】:

您不必“必须”;你可以写cin &gt;&gt; a[0]

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

只有约定才会导致选择。通常,如果您分配了多个int,您将使用“数组表示法”(a[i]),如果您只分配一个int,您将使用直接取消引用(*(a+0) , 或*a)。

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

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

至于您的第二个问题,&amp;p*p 给出不同的结果,因为它们的含义不同,我将把辨别这种差异作为练习留给读者。

【讨论】:

    猜你喜欢
    • 2017-06-06
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 2017-08-08
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    相关资源
    最近更新 更多