C 声明多维数组:指针或数组定义
这样声明多维数组有什么区别:C 声明多维数组:指针或数组定义,c,arrays,multidimensional-array,C,Arrays,Multidimensional Array,这样声明多维数组有什么区别: 1 2 3 4 4 6 7 1 1 1 5 6 7 9 inta[5][5] 还是这个 int*a[5] ? 哪一个更好用?谢谢。 您要声明的第一个二维数组(数组的数组) 第二步是声明一个指向int的指针数组,它可以用作多维数组 查看声明多维数组的详细信息 您要声明的第一个二维数组(数组的数组) 第二步是声明一个指向int的指针数组,它可以用作多维数组 看看如何声明多维数组inta[5][5]表示编译器应该分配足够的内存来存储25个整数,并将其视为一个名为
1 2 3 4
4 6
7 1 1 1 5 6 7
9
inta[5][5]代码>
还是这个
int*a[5]代码>
?
哪一个更好用?谢谢。
- 您要声明的第一个二维数组(数组的数组)
- 第二步是声明一个指向int的指针数组,它可以用作多维数组
查看声明多维数组的详细信息
- 您要声明的第一个二维数组(数组的数组)
- 第二步是声明一个指向int的指针数组,它可以用作多维数组
看看如何声明多维数组inta[5][5]
表示编译器应该分配足够的内存来存储25个整数,并将其视为一个名为a
的二维数组
int*a[5]
表示编译器应该分配足够的内存来存储5个指向整数的指针,并将其视为名为a
的指针数组。要将其实际用作二维数组,必须分配更多内存并初始化这些指针以指向它。例如:
int * a[5];
for(int i = 0; i < 5; i++){ a[i] = malloc(sizeof(int) * 5); }
int*a[5];
对于(inti=0;i<5;i++){a[i]=malloc(sizeof(int)*5);}
不知道你的需求,很难说哪一个更适合你。第二种方法允许您高效地交换两行,通常更灵活,但需要更多的代码来分配和释放数据结构。inta[5][5]
表示编译器应该分配足够的内存来存储25个整数,并将其视为一个名为a
的二维数组
int*a[5]
表示编译器应该分配足够的内存来存储5个指向整数的指针,并将其视为名为a
的指针数组。要将其实际用作二维数组,必须分配更多内存并初始化这些指针以指向它。例如:
int * a[5];
for(int i = 0; i < 5; i++){ a[i] = malloc(sizeof(int) * 5); }
int*a[5];
对于(inti=0;i<5;i++){a[i]=malloc(sizeof(int)*5);}
不知道你的需求,很难说哪一个更适合你。第二种方法允许您高效地交换两行,通常更灵活,但需要更多的代码来分配和释放数据结构。这两种方法都可用于声明二维数组
在第一种情况下,在内存中的连续区域中分配25个int元素。
在这种情况下,表达式a[i][j]
由编译器翻译成*(a+i*5+j)
第二个为int
分配5个指针。通过分配int
的向量并使这些指针指向这些向量,可以使其作为二维数组工作。
在这种情况下,a[i][j]
意味着获取a[i]
指向的指针,然后查找该向量中的第5个元素。也就是说,a[I][j]
被翻译成*(a[I]+j)
请注意,在第二种情况下,行的长度不必相同。这两个行都可以用于声明二维数组
在第一种情况下,在内存中的连续区域中分配25个int元素。
在这种情况下,表达式a[i][j]
由编译器翻译成*(a+i*5+j)
第二个为int
分配5个指针。通过分配int
的向量并使这些指针指向这些向量,可以使其作为二维数组工作。
在这种情况下,a[i][j]
意味着获取a[i]
指向的指针,然后查找该向量中的第5个元素。也就是说,a[I][j]
被翻译成*(a[I]+j)
请注意,在第二种情况下,行的长度不必相同。苹果和橙色哪个更好?
此符号inta[ROWS][COLS]
用于创建在声明时已知尺寸的二维矩形数组。
当二维数组声明时列数未知,或者运行时列数可能不同,或者只想创建如下非矩形(锯齿状)数组时,使用此int*a[ROWS]
符号:
1 2 3 4
4 6
7 1 1 1 5 6 7
9
苹果和橘子哪个更好?
此符号inta[ROWS][COLS]
用于创建在声明时已知尺寸的二维矩形数组。
当二维数组声明时列数未知,或者运行时列数可能不同,或者只想创建如下非矩形(锯齿状)数组时,使用此int*a[ROWS]
符号:
1 2 3 4
4 6
7 1 1 1 5 6 7
9
您可能会发现对“解码”复杂C声明有用。相关问题的可能重复:您可能会发现对“解码”复杂C声明有用。相关问题的可能重复: