【发布时间】:2014-10-02 05:05:54
【问题描述】:
3D 数组的每个元素都是一个 2D 数组。声明 3D 数组后,将 a 视为指向数组第零元素的指针。因此 a[0] 即 *(a+0) 或 *a 给出第零个元素,它是一个二维数组。我们知道,在提到二维数组时,我们会得到它的基地址。所以我想将第 0、第 1 和第 2 个二维数组基地址的基地址存储到数组指针 ptr1 中,但是由于我在每个 ptr1[0]、ptr1[1]、ptr1 中存储了 3 个 int 块的地址[2],我需要对它进行类型转换,但我不知道如何?
问题在于 int *ptr1[3]={a[0],a[1],a[2]}; 中的类型转换。 我得到的错误是:
无法在初始化中将 'int ()[3]' 转换为 'int'
#include <stdio.h>
int main()
{
static int a[3][3][3]={{1,2,3,4,5,6,7,8,9},
{2,4,6,8,10,12,14,16,18},
{3,6,9,12,15,18,21,24,27}};
static int* ptr[]={
a[0][0],a[0][1],a[0][2],
a[1][0],a[1][1],a[1][2],
a[2][0],a[2][1],a[2][2]};
int *ptr1[3]={a[0],a[1],a[2]};
printf("\n");
for(i=0;i<=8;i++)
{
printf("%d\n",*ptr2);
ptr2++;
}
printf("\n");
for(i=0;i<=2;i++)
{
printf("%d",*(ptr1[i]));
}
printf("\n");
for(i=0;i<=8;i++)
{
printf("%d",*ptr[i]);
}
return 0;
}
【问题讨论】:
-
你得到什么错误或不想要的输出?
-
很明显,您没有向我们展示您正在编译的内容。这个
a[2[0],a[2][1],a[2][2]};在第一个 2 之后缺少一个右方括号。int *ptr1[3]初始化程序中还有一个杂散的开放括号。 -
有一个左括号,并且 (a) 没有右括号,或者,更相关的是,(b) 不需要左括号。
-
既然
int *ptr[] = { a[0][0], … };没问题,那int *ptr1[3] = { a[0], … };不可能也可以。初始化器具有不同的类型,但数组具有相同的基本类型(指向int的指针数组)。您的printf()也在尝试打印格式为int的指针。 -
不要显示您不感兴趣的代码。请阅读如何创建 MCVE (How to create a Minimal, Complete, and Verifiable Example?) 或 SSCCE (Short, Self-Contained, Correct Example) — 相同基本思想的两个名称和链接.