C *arr[]是什么意思?

C *arr[]是什么意思?,c,arrays,matrix,C,Arrays,Matrix,我有我上次考试的代码,这是我第一次看到这个*arr[]。这是什么意思?它是矩阵还是数组? 它包含什么 #include <stdio.h> void f2(int **a, int x, int y); int main() { int m[3][4] = {{7,12,11,21 }, {20,1,2,3}, {33,42,11,50}}; int *arr[] = { m[0], m[1], m[2] }; f2(arr, 3, 4); _getch(); r

我有我上次考试的代码,这是我第一次看到这个*arr[]。这是什么意思?它是矩阵还是数组? 它包含什么

#include <stdio.h>
void f2(int **a, int x, int y);
int main()
{
  int m[3][4] = {{7,12,11,21 }, {20,1,2,3}, {33,42,11,50}};
  int *arr[] = { m[0], m[1], m[2] };
  f2(arr, 3, 4);
  _getch();
  return 0;
}

void f2(int **a, int x, int y)
{
  if (x > 0)
  {
    int i, j = 0, *p = a[x - 1];
    for (i = 0; i < y; i++)
    {
      if (!(p[i] % 3))
        printf("%d ", p[i]);
    }
    f2(a, x - 1, y);
  }
  else
    printf("\n");
}
根据声明

int *arr[]; // int* arr[] is also true but stick on to one format.
声明一个指向整数的指针数组

揭开神秘的面纱:

int m[3][4] = {{7,12,11,21 }, {20,1,2,3}, {33,42,11,50}};
int *arr[] = { m[0], m[1], m[2] };
m是一个数组。 m[0],m[1],m[2]指向int[4]。A点 m[0][0]是一个整数。 从点A可以理解m[0]、m[1]、m[2]是指针。 揭开神秘的面纱:

int m[3][4] = {{7,12,11,21 }, {20,1,2,3}, {33,42,11,50}};
int *arr[] = { m[0], m[1], m[2] };
arr[0]、arr[1]、arr[2]分别分配给m[0]、m[1]、m[2]。 m[1][2]相当于arr[1][2]。 *arr[]是什么意思

作为独立表达式*arr[]无效

对于变量定义,根据此类表达式出现的上下文,这里有两种含义:

根据OP的代码段使用初始化器定义变量

这定义了一个指向int的指针数组,其元素数由其初始化器中的元素数决定。在上述示例中,arr将有三个元素

函数参数列表中的变量定义

如果像这样使用,则在函数声明/定义中

void foo(int * arr[]);
它实际上定义了一个int**,一个指向int的指针。在函数声明/定义的上下文中,int*arr[]和int**arr是等价的,或者更一般的T*[]等于T**

明确声明:在任何情况下int*arr[]都不定义任何int。

int *arr[] = { m[0], m[1], m[2] };
将arr声明为指向int的指针数组;数组的大小由初始值设定项3的数量决定。这和写作是一样的

int *arr[3];
arr[0] = m[0];
arr[1] = m[1];
arr[2] = m[2];
每个初始值设定项m[0]、m[1]和m[2]都是int的4元素数组;但是,在大多数情况下,数组类型为T的表达式将转换为指针类型为T的表达式,并且表达式的值将是数组第一个元素的地址,因此上面的行等效于

int *arr[] = { &m[0][0], &m[1][0], &m[2][0] };

arr中的每个元素都是指向int的指针,而不是int的数组。由于C中数组的下标方式,arr[i][j]将给出与m[i][j]相同的结果。

它是否用数字填充?如果是,它们是什么的大小?如初始值设定项所示,元素的数量为三个。sizeofarr是指针中的字节数。@lasvegasnay:谁?数组的元素?是,通过初始化器给出的值:{m[0],m[1],m[2]}@nicomp:澄清了措辞。@sjsam:integer数组与integer数组:我更喜欢前者,因为后者可以用每个数组元素可能包含整数的方式来解释,也就是说,不止一个整数,这绝对不是事实。此外,整数数组与实际编码的内容一致:inta[42]。从英语语法的角度来看,整数数组可能是错误的。我觉得数组中已经有了复数。这真的是一个初学者的问题。你可以在任何一本像样的C语言书的开头几页中了解到这一点。@machine_1哦,真的吗?如果初学者的问题困扰你,你可以忽略它!这有助于谷歌的搜索过程更快,我相信很多其他初学者也有这个问题。这可能是一个快速搜索帮助@艾尔克:我是说艾尔有一种类型吗?对不起,我没听懂你的意思,我读的是declare as define,这不一样,sry。