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

Entering value to dynamically allocated memory at runtime

本文关键字:内存 输入 动态分配 运行时      更新时间:2023-10-16

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

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

你不必";你可以写cin >> a[0]

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

只有惯例才能导致选择。就像一般情况下,如果你分配了多个int你会使用"数组符号"(a[i](,如果你只分配了一个int你会使用直接取消引用(*(a+0)*a(。

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

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

至于你的第二个问题,&p*p给出不同的结果,因为它们意味着不同的东西,我将把辨别这种差异留给读者作为练习。