C语言三种方法调用数组

时间:2023-03-08 21:12:43
 #include <stdio.h>
/*********************************
* 方法1: 第一维的长度可以不指定 *
* 但必须指定第二维的长度 *
*********************************/
void print_a(double a[][], int n, int m)
{
int i, j; for(i = ; i < n; i++)
{
for(j = ; j < m; j++)
{
printf("%lf ", a[i][j]);
} printf("\n");
}
//printf("%d ", a[1][0]+a[2][0]);//输出3+6,
//a[4][4]=a[1][0]+a[2][0]; //即验证是不是真能直接操作数组,答案是可以
}
/**************************************************************
*方法2: int (*a)[5]是指向一个一维数组(有5个int型元素)的指针,*
*因为原数组每行有5个元素,故int (*a)[5]中必须为5 *
**************************************************************/
void print_b(double (*a)[], int n, int m)
{
int i, j; for(i = ; i < n; i++)
{
for(j = ; j < m; j++)
printf("%lf ", a[i][j]); printf("\n");
}
}
/***********************************
*方法3: 利用数组是顺序存储的特性, *
* 通过降维来访问原数组! *
***********************************/
void print_c(double *a, int n, int m)
{
int i, j; for(i = ; i < n; i++)
{
for(j = ; j < m; j++)
printf("%lf ", *(a + i*m + j)); printf("\n");
} }
int main(void)
{
double a[][] = {{1.0, 2.0}, {3.0, 4.0, 5.0}, {6.0}, {7.0}, {0.0, 8.0}}; printf("\n方法1:\n");
printf("输出a:%lf\n",a);
print_a(a, , );
printf("%lf ", a[][]+a[][]);//输出3+6,
printf("%lf ", a[][]+a[][]);//输出3+6 printf("\n方法2:\n");
printf("输出a:%lf\n",a);
print_b(a, , ); printf("\n方法3:\n");
printf("输出&a[0][0]:%lf\n",&a[][]);
printf("输出&a:%lf\n",&a);
printf("输出a:%lf\n",a);
print_c(&a[][], , ); //&a是会警告的,&a[0][0]才最好 getchar();
return ;
}

C语言三种方法调用数组