Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 声明多维数组:指针或数组定义_C_Arrays_Multidimensional Array - Fatal编程技术网

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声明有用。相关问题的可能重复: