在VS Express 2012中定义c中的2D数组

时间:2017-05-17 21:02:08

标签: c arrays

#include<stdio.h>
void main()//this is the way that we pragram in c
{
  int arr[][]={{1,2},{1,2},{1,3}};//in class it wasnt required to initialize both
}

错误:

  

错误1错误C2087:&#39; arr&#39; :缺少下标
  错误2错误C2078:初始化程序太多了   3 IntelliSense:数组可能没有此类元素

我是初学者,我在课堂上看到教授做了同样的事情。 我也问过我的导师,他告诉我应该提出这个错误。

有人可以请我到哪里,问题是什么?

3 个答案:

答案 0 :(得分:3)

你错过了这种类型;必须指定除第一维之外的所有维度;并且您在聚合初始值设定项之间缺少逗号。工作示例:

print(sample.iloc[:,0].argmax())

答案 1 :(得分:1)

当你有这样的宣言时

int arr[][]={{1,2},{1,2},{1,3}};

然后编译器可以确定最左边维度的元素数量。有三个初始值设定项,因此最左侧的维度等于3.但编译器无法确定最右侧维度中的元素数量,因为所有这些声明都是有效的

int arr[][2]={{1,2},{1,2},{1,3}};
int arr[][20]={{1,2},{1,2},{1,3}};
int arr[][200]={{1,2},{1,2},{1,3}};

因此,您需要明确指定数组最右侧维度中的元素数量。我猜你的意思是以下数组声明

int arr[][2]={{1,2},{1,2},{1,3}};

相当于

int arr[3][2]={{1,2},{1,2},{1,3}};

虽然MS VS允许声明主要像

void main()
然而,根据C标准,没有参数的函数main应声明为

int main( void )

即使没有重新运行声明。

答案 2 :(得分:0)

您应该在数组声明中添加类型 - 例如int arr [] []。 如果您不想指定列和行的大小,则必须动态执行。例如这样:

 #include <stdio.h>
 #include <stdlib.h>

int main()
{
    int r = 3, c = 4, i, j, count;

    int **arr = (int **)malloc(r * sizeof(int *));
    for (i=0; i<r; i++)
         arr[i] = (int *)malloc(c * sizeof(int));

    // Note that arr[i][j] is same as *(*(arr+i)+j)
    count = 0;
    for (i = 0; i <  r; i++)
      for (j = 0; j < c; j++)
         arr[i][j] = ++count;  // OR *(*(arr+i)+j) = ++count

    for (i = 0; i <  r; i++)
      for (j = 0; j < c; j++)
         printf("%d ", arr[i][j]);

   /* Code for further processing and free the 
      dynamically allocated memory */

   return 0;
}