gpt4 book ai didi

c - 指针声明数组

转载 作者:太空狗 更新时间:2023-10-29 15:17:35 25 4
gpt4 key购买 nike

我需要一些关于指针数组的解释,更准确地说,如何声明它们
看看这段代码:

main()
{
int array[] = {5, 4, 2};
int array2[] = {6, 8};
int* int_arrays[2] = {array, array2}; // It works!

// int* int_arrays2[2] =
// {
// {5, 4, 2},
// {6, 8}
// };
//
int i, j;
for(i = 0; i < 2; i++)
{
for(j = 0; j < 3; j++) // This loop print a garbage value at the end, no big deal.
printf("%d\n", int_arrays[i][j]);
}
}

对我来说,注释的声明与上面的声明相同。但它不起作用。
visual studio C 编译器给我这些指示:
错误:初始化程序过多。
警告:int* 与 int 的间接级别不同。

我猜这意味着 int array[] = {5, 4, 2} 可以有效分配给 int*
{5, 4, 2} 不是。
您能告诉我一种正确删除指针数组的方法吗?

最佳答案

数组初始值设定项不是对象,因此您不能拥有指向此类对象开头的指针。如果你至少有 C99,你可以做

int* int_arrays2[2] =
{
(int[]){5, 4, 2},
(int[]){6, 8}
};

这些是所谓的“复合文字”,它们是对象,因此在这种情况下隐藏为您需要的指针类型。

关于c - 指针声明数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34087670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com