c/c++语言开发共享在函数中使用2D数组:错误

我尝试在2D数组中设置值并使用Function打印它。

但我很难将数组发送到函数。

#include  void SetArr(int (*arr)[], int n); void PrintfArr(int (*arr)[], int n); int main() { int arr[100][100]; for(int i=0; i<100; i++) for(int j=0; i<100; j++) arr[i][j]=0; //initiallize Array int size; printf("input Size : "); scanf("%d", &size); SetArr(arr, size); PrintfArr(arr, size); return 0; } void SetArr(int (*arr)[], int n) { int i, j; for(i=0; i<n; i++) { for(j=0; j<n; j++) arr[i][j]=i+j; // Error! "Subscript of Pointer to imcomplete~ } } void PrintArr(int (*arr)[], int n) { int i, j; for(i=0; i<n; i++) { for(j=0; j<n; j++) printf("%d", arr[i][i]); // Error! "Subscript of Pointer to imcomplete~ } printf("n"); } 

如您所见,使用“arr [] []时,两个函数都有同样的问题

    在函数声明中,必须提及数组的大小(长度)。 这就是编译器在说“不完整类型”时的含义:它需要大小来理解如何访问其元素。

    为了使编译器可以使用大小,它应该首先在函数的声明中:

     void SetArr(int n, int (*arr)[n]) 

    这里arr在技​​术上是“指向n元素数组的指针”,但是在C中习惯上将指针视为数组,因此arr可以被视为“ n元素的数组数组”,这与a相同二维arrays。

    您可能想要提及数组的两个维度:

     void SetArr(int n, int arr[n][n]) 

    这相当于第一个声明,但似乎更清楚。

    声明像这样的函数

     void SetArr( int ( *arr )[100], int n ); void PrintfArr( int ( *arr )[100], int n ); 

    您可能不会声明您标记为最佳答案中显示的function

    考虑以下代码而不是100我使用3作为数组维度。 如果您将在PrintArr函数和main中打印数组,您将得到不同的结果!

     #include  void SetArr( size_t n, int (*arr)[n] ) void PrintArr( size_t n, int (*arr)[n] ) int main(void) { int arr[3][3]; size_t n = 2; SetArr( n, arr ); PrintArr( n, arr ); printf( "n" ); for ( size_t i = 0; i < n; i++ ) { for ( size_t j = 0; j < n; j++ ) printf( "%2d", arr[i][j] ); printf( "n" ); } return 0; } void SetArr( size_t n, int (*arr)[n] ) { for ( size_t i = 0; i < n; i++ ) { for ( size_t j = 0; j < n; j++ ) arr[i][j] = i * n + j; } } void PrintArr( size_t n, int (*arr)[n] ) { for ( size_t i = 0; i < n; i++ ) { for ( size_t j = 0; j < n; j++ ) printf( "%2d", arr[i][j] ); printf( "n" ); } } 

    程序输出是

      0 1 2 3 0 1 3 1 

    如您所见,第一个输出与第二个输出不一致。 如果函数声明为我在post开头指出的那样,你会得到正确的结果。 例如

     #include  void SetArr( int (*arr)[3], size_t n ); void PrintArr( int (*arr)[3], size_t n ); int main(void) { int arr[3][3]; size_t n = 2; SetArr( arr, n ); PrintArr( arr, n ); printf( "n" ); for ( size_t i = 0; i < n; i++ ) { for ( size_t j = 0; j < n; j++ ) printf( "%2d", arr[i][j] ); printf( "n" ); } return 0; } void SetArr( int (*arr)[3], size_t n ) { for ( size_t i = 0; i < n; i++ ) { for ( size_t j = 0; j < n; j++ ) arr[i][j] = i * n + j; } } void PrintArr( int (*arr)[3], size_t n ) { for ( size_t i = 0; i < n; i++ ) { for ( size_t j = 0; j < n; j++ ) printf( "%2d", arr[i][j] ); printf( "n" ); } } 

    程序输出是

      0 1 2 3 0 1 2 3 

    正如您在本案中所看到的,两个输出重合。

      以上就是c/c++开发分享在函数中使用2D数组:错误相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/523091.html

      (0)
      上一篇 2020年12月11日
      下一篇 2020年12月11日

      精彩推荐