* arr []是什么意思?

las*_*nay -6 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();
  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");
}
Run Code Online (Sandbox Code Playgroud)

alk*_*alk 5

什么*arr[]意思

由于独立表达式*arr[]无效。

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

  1. 带有初始化程序的变量定义(根据OP的代码段)

    int * arr[] = { m[0], m[1], m[2] };
    
    Run Code Online (Sandbox Code Playgroud)

    这定义的阵列的指针,以int与由在其初始化剂元件的数目来确定其元素的个数。在上面的示例arr中将包含三个元素。

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

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

    void foo(int * arr[]);
    
    Run Code Online (Sandbox Code Playgroud)

    它实际上定义了一个int **,一个指针指针int。在函数声明/定义的上下文中,int * arr[]int ** arr是等效的,或更笼统的T*[]等于T**

要明确说明这一点:任何情况下int * arr[]不要定义任何int