* arr []是什么意思?

时间:2016-07-09 10:37:07

标签: 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");
}

3 个答案:

答案 0 :(得分:3)

  

*arr[]是什么意思?

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

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

  1. 带有初始化程序的变量定义(根据OP的摘要)

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

    这将指针的数组定义为int,其元素数量由其初始化程序中的元素数量决定。在上面的示例中,arr将包含三个元素。

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

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

    void foo(int * arr[]);
    

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

  3. 明确说明:案例中int * arr[]定义任何int

答案 1 :(得分:1)

通过声明

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}};
  • m是一个数组。
  • m[0]m[1]m[2]指向int[4]。点#A
  • m[0][0]是一个整数。

#A 点可以理解,m[0]m[1]m[2]是指针。

揭秘:

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]

答案 2 :(得分:1)

该行

redirect_uri=http://mysite.elasticbeanstalk.com:15555/Callback&response_type=code&scope=https://www.googleapis.com/auth/youtube.force-ssl

int *arr[] = { m[0], m[1], m[2] }; 声明为指向arr的指针数组;数组的大小由初始化器的数量决定(3)。这与编写

是一回事
int

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

T

int *arr[] = { &m[0][0], &m[1][0], &m[2][0] }; 中的每个元素都是int的指针,而不是int数组。由于C中的数组下标如何工作,arr将为您提供与arr[i][j]相同的结果。