数组相信大家都不会陌生,编程中常见的一种数据类型。
现在说的问题是关于二维数组调用的一些情况。
int a[5][5]
像这样我们随便定义一个二维数组,在传递参数的时候像这样就OK了
void f(int a[][5])
{
/*....*/
}
当然还有一些其他的方法可以处理函数调用的问题,当然这个问题并不是这篇博客所讨论的重点,在一次写程序中:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include<math.h>
#include<string.h>
#include<gmp.h>
#define Center 5
#define Dim 48
void printf_center(mpz_t** center);
void printf_int(int** hhh);
int main(int argc, char* argv[])
{
int i,j,**hhh;
mpz_t **center;
center=(mpz_t **)malloc(sizeof(mpz_t *)*Center);
hhh=(int **)malloc(sizeof(int *)*Center);
for(i=0;i<Center;i++)
{
center[i]=(mpz_t *)malloc(sizeof(mpz_t)*Dim);
hhh[i]=(int *)malloc(sizeof(int)*Dim);
for(j=0;j<Dim;j++)
{
mpz_init_set_si(center[i][j],j);
hhh[i][j]=j;
}
}
printf("在main函数中的输出!\n");
for(i=0;i<Center;i++)
{
for(j=0;j<Dim;j++)
{
gmp_printf("%Zd ",center[i][j]);
}
printf("\n");
}
printf("调用函数输出:\n");
printf_center(center);
printf_int(hhh);
return 0;
}
void printf_center(mpz_t** center)
{
int i,j;
for(i=0;i<Center;i++)
{
for(j=0;j<Dim;j++)
{
gmp_printf("%Zd ",center[i][j]);
}
printf("\n");
}
}
void printf_int(int** hhh)
{
int i,j;
for(i=0;i<Center;i++)
{
for(j=0;j<Dim;j++)
{
printf("%d ",hhh[i][j]);
}
printf("\n");
}
}
可以看出来在上面的代码中二维数组的定义并非一个确定的值,数组的内存是我通过malloc函数申请的,也就是动态数组,这时候我们如果像之前那样进行函数调用就会报错,错误提示为:
error: cannot convert ‘int**’ to ‘int (*)[48]’
void printf_int(int hhh[][Dim]);
所以我们只能这样来调用
void printf_int(int** hhh);
行吧 就到这了,希望有所帮助