int数组的双指针

时间:2018-01-08 15:34:14

标签: c arrays pointers double programming-languages

声明:

int** a[3];

我可以说6个指针是否被宣布?

我的理由是,对于数组的每个单元格,我都可以通过*a[1]**a[1]输入。

这是一个正确的假设,我只能说我已经声明了指向3个整数的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件事 - 你可以将这些东西设置为指向其他东西,而这些东西又指向其他东西,但其他东西不是由于这个宣言而产生的。