C int数组的双指针

C int数组的双指针,c,arrays,pointers,double,programming-languages,C,Arrays,Pointers,Double,Programming Languages,宣布: int** a[3]; 我可以说有6个指针被声明了吗 我的推理是,对于数组的每个单元格,我可以通过*a[1]或**a[1]输入它 这是一个正确的假设吗?我只能说我声明了3个指向3个整数的指针吗?不,您声明了一个由3个int**指针组成的数组,具有自动存储持续时间,仅此而已。另外3岁左右的人还没有自发地创造出来 为了使每个元素都有意义,每个元素都必须指向指向int的指针。以下代码为数组的第一个元素指定有意义的内容: int main() { int** a[3]; int

宣布:

int** a[3];
我可以说有6个指针被声明了吗

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


这是一个正确的假设吗?我只能说我声明了3个指向3个整数的指针吗?

不,您声明了一个由3个
int**
指针组成的数组,具有自动存储持续时间,仅此而已。另外3岁左右的人还没有自发地创造出来

为了使每个元素都有意义,每个元素都必须指向指向
int
的指针。以下代码为数组的第一个元素指定有意义的内容:

int main()
{
    int** a[3];
    int foo;
    int* bar = &foo;
    a[0] = &bar;
}

最后,请注意,如果将
int***
类型作为参数传递给函数,则
a
可能会衰减为
int***
类型。

否,您声明了一个包含3个
int**
指针的数组,并具有自动存储持续时间,仅此而已。另外3岁左右的人还没有自发地创造出来

为了使每个元素都有意义,每个元素都必须指向指向
int
的指针。以下代码为数组的第一个元素指定有意义的内容:

int main()
{
    int** a[3];
    int foo;
    int* bar = &foo;
    a[0] = &bar;
}
最后,请注意,如果将
int***
类型作为参数传递给函数,则
a
可能会衰减为
int***
类型

我可以说有6个指针被声明了吗

不,此行声明了一个由三个指针组成的数组。即使每个指针都可能指向
int
的指针,但最初它们并不指向任何东西

我可以通过
*a[1]
**a[1]

数组的每个元素都是指向
int
的指针-从声明中无法推断出任何其他内容

您可以使用此声明创建一个三维整数数组,每个维度的大小不同,也可以使用
NULL
s填充整个数组。声明中没有任何内容限制由三个指针组成的数组可以容纳的指针数量

我可以说有6个指针被声明了吗

不,此行声明了一个由三个指针组成的数组。即使每个指针都可能指向
int
的指针,但最初它们并不指向任何东西

我可以通过
*a[1]
**a[1]

数组的每个元素都是指向
int
的指针-从声明中无法推断出任何其他内容


您可以使用此声明创建一个三维整数数组,每个维度的大小不同,也可以使用
NULL
s填充整个数组。声明中没有任何内容限制由三个指针组成的数组可以容纳的指针数量。

您可以说您已经声明了一个由三个东西组成的数组-您可以将这些东西设置为指向其他东西,而这些东西反过来又指向其他东西,但这些其他东西不是由于此声明而创建的

你所能说的就是你已经声明了一个由3个东西组成的数组——你可以将这些东西设置为指向其他东西,而这些东西反过来又指向其他东西,但是这些其他东西并不是由于这个声明而创建的

指向指针的指针不是数组,与数组完全无关。在某些情况下,您可以将指向指针的指针与动态分配一起使用,以创建一个模拟数组但不是数组的查找表。然而,这通常不是一个好主意。指针到指针不是数组,与数组完全无关。在某些情况下,您可以将指向指针的指针与动态分配一起使用,以创建一个模拟数组但不是数组的查找表。然而,这通常是个坏主意。