[英]Double pointer with 2-d array
我有这个功能
int findMax(int **a,int row,int column)
我有一个二维数组a[10][10]
。
现在我该怎么办才能将这个数组的地址传递给我的函数指针**a
?
我看到了其他答案,但是问题仍然存在,我必须传递地址,但是每当我尝试执行此操作时,我的编译器就会开始给出错误,并说无法将int转换为int并键入不匹配错误。 而且我只能使用具有** a的功能。
给我您的宝贵建议和想法,我该怎么做?
这是我的代码。
#include<stdio.h>
int findMax(int **a,int r,int c);
int main()
{
int a[10][10],i,j,mx,r,c;
printf("Enter the number of rows in the matrix\n");
scanf("%d",&r);
printf("Enter the number of columns in the matrix\n");
scanf("%d",&c);
printf("Enter the elements in the matrix\n");
for(i=1;i<=r;i++)
{
for(j=1;j<=c;j++)
scanf("%d",&a[i][j]);
}
printf("The matrix is\n");
for(i=1;i<=r;i++)
{
for(j=1;j<=c;j++)
printf("%d ",a[i][j]);
printf("\n");
}
printf("\n");
mx=findMax((*a)[10],r,c);
printf("The maximum elements in the matrix is %d\n",mx);
return 0;
}
int findMax(int **a,int r,int c)
{
int t,i,j;
t=a[1][1];
for(i=1;i<=r;i++)
{
for(j=1;j<=c;j++)
{
if(a[i][j]>t)
t=a[i][j];
}
}
return (t);
您可以像定义函数一样
int findMax( int ( *a )[10], int r );
或喜欢
int findMax( int r, int c, int ( *a )[c] );
如果您的编译器支持C99,则最后一个声明是可能的。
考虑到该功能有错别字。 代替
t=a[1][1];
必须有
t=a[0][0];
或这些循环
for(i=1;i<=r;i++)
{
for(j=1;j<=c;j++)
必须像这样写
for(i=0;i < r;i++)
{
for(j=0; j < c;j++)
main中存在相同的问题。 例如代替
for(i=1;i<=r;i++)
{
for(j=1;j<=c;j++)
scanf("%d",&a[i][j]);
}
你必须写
for ( i = 0;i < r; i++ )
{
for ( j = 0; j < c; j++ )
scanf("%d",&a[i][j]);
}
因为C中的索引从0开始。
如果您的编译器支持C((,则程序看起来像
#include <stdio.h>
int findMax( int r, int c, int a[r][c] )
{
int max = a[0][0];
for ( int i = 0; i < r; i++ )
{
for ( int j = 0; j < c; j++ )
{
if ( max < a[i][j] ) max = a[i][j];
}
}
return max;
}
int main(void)
{
int r, c;
printf( "Enter the number of rows in the matrix: " );
scanf( "%d", &r );
printf( "Enter the number of columns in the matrix: " );
scanf( "%d", &c );
int a[r][c];
for ( int i = 0; i < r; i++ )
{
for ( int j = 0; j < c; j++ )
{
scanf( "%d", &a[i][j] );
}
}
printf( "The matrix is\n" );
for ( int i = 0; i < r; i++ )
{
for ( int j = 0; j < c; j++ ) printf( "%d ", a[i][j] );
printf( "\n" );
}
printf( "\n" );
int mx = findMax( r, c, a );
printf( "The maximum elements in the matrix is %d\n", mx );
return 0;
}
否则,您可以动态分配数组。 例如
#include <stdio.h>
#include <stdlib.h>
int findMax( int **a, int r, int c )
{
int i, j;
int max = a[0][0];
for ( i = 0; i < r; i++ )
{
for ( j = 0; j < c; j++ )
{
if ( max < a[i][j] ) max = a[i][j];
}
}
return max;
}
int main(void)
{
int r, c;
int i, j;
int **a;
int mx;
printf( "Enter the number of rows in the matrix: " );
scanf( "%d", &r );
printf( "Enter the number of columns in the matrix: " );
scanf( "%d", &c );
a = ( int ** )malloc( r * sizeof( int * ) );
for ( i = 0; i < r; i++ ) a[i] = ( int * )malloc( c * sizeof( int ) );
for ( i = 0; i < r; i++ )
{
for ( j = 0; j < c; j++ )
{
scanf( "%d", &a[i][j] );
}
}
printf( "The matrix is\n" );
for ( i = 0; i < r; i++ )
{
for ( j = 0; j < c; j++ ) printf( "%d ", a[i][j] );
printf( "\n" );
}
printf( "\n" );
mx = findMax( a, r, c );
printf( "The maximum elements in the matrix is %d\n", mx );
for ( i = 0; i < r; i++ ) free( a[i] );
free( a );
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.