你能帮我弄清楚如何在一次分配呼叫中分配2D阵列吗?
我试着这样做:
int ** arr =(int **)malloc(num * num * sizeof(int *));
但它不起作用。
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="Change" Click="ChangeStatus_Click"/>
<MenuItem Click="MenuItem_OnClick">
<MenuItem.Style>
<Style TargetType="{x:Type MenuItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsActive}" Value="True">
<Setter Property="Header" Value="off"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsActive}" Value="False">
<Setter Property="Header" Value="on"/>
</DataTrigger>
</Style.Triggers>
</Style>
</MenuItem.Style>
</MenuItem>
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
是行和列。
答案 0 :(得分:4)
如何在1中分配C
动态分配array2D
让我们从2D阵列开始:
2D array or "array 3 of array 4 of int"
int arr1[3][4];
arr1[0][0] = this;
OP的代码声明pointer to pointer to int,不是2D数组,也不是指向2D数组的指针 顺便说一句,演员不需要。
int** arr = (int**)malloc(num * num * sizeof(int*));
代码可以为2D数组分配内存并返回指向该内存的指针。 pointer to array 5 of array 6 of int
int (*arr2)[5][6] = malloc(sizeof *arr2);
if (arr2 == NULL) return EXIT_FAILURE;
(*arr2)[0][0] = this;
return EXIT_SUCCESS;
// or with Variable Length Arrays in C99 and optionally in C11
int (*arr3)[num][num] = malloc(sizeof *arr3);
(*arr3)[0][0] = that;
或者代码可以为1D数组分配内存并返回指向该内存的指针。 pointer to array 8 of int。有时这通常是人们想要的“分配2D”数组,实际上是指向一维数组的指针
int (*arr4)[8] = malloc(sizeof *arr4 * 7);
arr4[0][0] = this;
// or
int (*arr5)[num] = malloc(sizeof *arr5 * num);
arr5[0][0] = that;
答案 1 :(得分:0)
您可以使用以下两种方式之一分配2D数组。
这将是:
int rows = 10;
int cols = 10;
int **array = malloc(rows * sizeof(int*));
for (int i = 0; i < rows; i++) {
array[i] = malloc(cols * sizeof(int));
}
array
现在将指向每个表示一行的指针列表,这些指针将指向行中的元素。在这种情况下,您可以使用array[n][m]
这可能是您想要的方法,您可以在一次分配中完成所有操作。这将要求您以二维表示形式存储二维数组。
int rows = 10;
int cols = 10;
int *array = malloc(rows * cols * sizeof(int));
然后,您可以使用偏移量存储和检索第n行和第m列:array[(n * cols) + m]
答案 2 :(得分:0)
虽然我想到了&#34; 2D整数数组的含义&#34;毫无疑问是int arr[10][10]
之类的东西,在网上搜索带来的解释就像&#34;使用一系列指针&#34;或者&#34;使用指向指针的指针&#34; (例如,参见this post)。此答案的其余部分基于int arr[r][c]
形式的2D数组,其中r
表示行数,c
表示每行的列数。
如果不支持可变长度数组,则至少c
必须是const表达式(即在编译时已知)。相反,r
也可以在运行时定义,使得至少行数是动态的&#34;。然后可以将2D阵列表示为一个D阵列的(可能是不完整的)阵列:
#define COLS 3
void printArray(int array[][COLS], int rows) {
for(int row=0; row<rows; row++) {
for (int col=0; col<COLS; col++) {
printf("%d ", array[row][col]);
}
printf("\n");
}
}
int main() {
typedef int oneD[COLS];
int rows = 5;
size_t myArray5RowsSize = rows*sizeof(oneD);
oneD *myArray5Rows = malloc(myArray5RowsSize);
memset(myArray5Rows,0,myArray5RowsSize);
myArray5Rows[0][0] = 0;
myArray5Rows[1][1] = 1;
myArray5Rows[2][2] = 2;
printArray(myArray5Rows, 5);
return 0;
}