您已定义SortTableRows
为ints
with的数组int SortTableRows[20]
。该标识符现在固定为一个数组,它不能用于其他任何东西。然后,您尝试将其用作声明指针的类型(我认为)。如果你想声明一个指向整数数组的指针,你可以这样做:
int *SortTableRowsPtr;
SortTablesRowPtr = SortTablesRows;
在第二个问题中,您将一个值分配给指向您视为二维数组的指针的指针,这对您的编译器没有真正的影响(尽管在这种情况下它没有真正的意义),如 '多维数组以线性方式存储在内存中,与单维数组相同。您typedef
在这里没有任何实际意义,因为您正在定义一种数组类型,然后创建一个指向它的未初始化指针(这会创建一个int **
),并像指向有效的东西一样访问它(这将编译,但肯定会崩溃)。
要进行这项工作,您需要定义一个包含 20 个整数的数组,然后指向它:
SortTablesRows table[10] = {}; // equivalent to int table[10][20];
SortTablesRowPtr = table;
这是有效的,因为您声明了一个指向 20 个整数数组的指针,即
int (*SortTablesRowPtr)[20];
我已经扩展了这个答案。它有助于一步一步地更简单地解释它。取一张 3 行 10 列的表格。这是定义的:
int table[3][10];
然后,您可以设置指向该表的指针。因为它是二维的,所以这是不对的:
int *ptr = table; // wrong - incompatible pointer
但这将指向第二行(和第一列):
int *ptr = table[1];
换句话说,您想要一个指向 10 个整数数组的指针,即您想要一个指向int n[10]
. 为此,您可以编写:
int (*ptr2)[10] = table;
现在,您可以使用ptr2
指针、数组或两者来直接访问表。就目前而言,它指向第一行和第一列。如果您添加一个,ptr2
它将选择下一行。
ptr2[1][3] = 3; // change row 2, column 4
(*(ptr2 + 1))[4] = 10 // row 2, column 5 (yuck)