以下是我编写的用于在运行时读取值以动态分配的内存的代码:
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();
}
我想知道,在为用户整数输入数据时,我们必须将*a
和cin
与cout
配合使用,以便在第5和6行中输入数据数组,我们只在第12和16行中给了指针变量名称。有人可以告诉我为什么会有这种区别吗?
此外,还有谁能告诉我第7行和第8行的输出之间的区别。
答案 0 :(得分:0)
您不必“必须”;您可能已经写过cin >> a[0]
。
对于内置类型和指针等,a[b]
是*(a+b)
是*(b+a)
是b[a]
,可以互换它们。
这是导致选择的唯一约定。通常,如果您分配了多个int
,则将使用“数组符号”(a[i]
);如果您仅分配了一个int
,则将使用向上取消引用(*(a+0)
或*a
)。
但是该语言并不真正在乎分配多少元素,因为无论哪种方式,您都只有一个指向“一个或多个”连续元素的指针。
tl; dr这就是语法的设计方式。
关于您的第二个问题,&p
和*p
给出不同的结果,因为它们表示不同的含义,我将把这种区别作为练习供读者阅读。