声明:
int** a[3];
我可以说6个指针是否被宣布?
我的理由是,对于数组的每个单元格,我都可以通过*a[1]
或**a[1]
输入。
这是一个正确的假设,我只能说我已经声明了指向3个整数的3个指针吗?
答案 0 :(得分:4)
我可以说6个指针是否被宣布?
不,这一行声明了一个由三个指针组成的数组。即使每个指针都指向一个指向int
的指针,最初它们也没有指向任何指针。
我可以通过
输入数组的每个单元格*a[1]
或**a[1]
数组的每个元素都是指向int
指针的指针 - 没有任何其他内容可以从声明中推断出来。
您可以使用此声明来创建一个三维整数数组,每个维度具有不同的大小,或者您可以使用NULL
填充整个数组。声明中没有任何内容限制三个指针数组可以保存的指针数。
答案 1 :(得分:1)
不,您已经声明了一个包含3个int**
指针的数组,这些指针具有自动存储持续时间,这就是全部。另外3个人没有自发创造。
对于每个具有意义的元素,每个元素都必须指向int
的指针。以下代码为数组的第一个元素分配了一些有意义的东西:
int main()
{
int** a[3];
int foo;
int* bar = &foo;
a[0] = &bar;
}
最后请注意,a
如果传递给int***
类型作为参数的函数, 可以衰减到<{1}}类型。
答案 2 :(得分:0)
所有你可以说你已经宣布了一系列3件事 - 你可以将这些东西设置为指向其他东西,而这些东西又指向其他东西,但其他东西不是由于这个宣言而产生的。