我尝试在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