我知道这是一个古老的栗子,但我想要一个静态分配在我的代码中的小二维数组。我知道这样做的方法是:C中的二维数组初始化
static int A[3][2] = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
这很好,我可以访问它的所有成员。但是我有几个问题,把它传递给一个函数,例如:
void print_matrix(int **a, int r, int c)
{
int x, y;
for(x = 0; x < r; x++)
{
printf("Row %02d = %#x = ", x, a[x]);
for(y = 0; y < c; y++)
{
printf("%s%d", (0 == y) ? "" : ", ", a[x][y]);
}
printf("\n");
}
}
首先,我不能简单地传递A
的功能,我需要将其转换为(INT **)。由于char *
与char []
是同义词,所以我对此有点惊讶。其次,它崩溃,当我检查调试器时,在子函数中,a[0]
报告为1
,而不是指向整数数组的指针。
我知道这里发生了编译器/ C语言奥术魔法。但它有点令人困惑。如果我尝试初始化为:
static int *A[3] = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
我收到很多警告。这是如何的不同而不同:
static char *S[3] = { "hello", "there", "stackoverflow" };
除了奥术魔法ç的问题,这在某种程度上我从来尽管在C语言编程的十年:(,我想学会懂得我的生成数组这样我就可以顺利通过它作为一个int **
而不必通过的for循环所有FAG或复制静态分配的数组动态分配一个。
将在下面的工作?
int *A0 = { 1, 2 };
int *A1 = { 3, 4 };
int *A2 = { 5, 6 };
int **A = { A0, A1, A2 };
有没有比这更好的方法呢?
谢谢,所有。
P.s.我知道在现实生活中,我们会从数据库或文件中读取数值到动态分配的数组中,并避免所有这些。
这验证码的东西提交问题很烂!第一个字母有两个字母重叠,第二个字母全部模糊,完全不可读!我做了音频挑战,几乎听不到第二部分。 – AlastairG 2010-12-10 14:12:59