gpt4 book ai didi

c - 带二维数组的双指针

转载 作者:太空宇宙 更新时间:2023-11-04 04:36:01 24 4
gpt4 key购买 nike

我有这个功能

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;
}

关于c - 带二维数组的双指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30538691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com