C语言中,定义了二维数组a[N][N],当调用函数fun(a)时,形参为什么不能是**a,只能是(*a)[N]或a[][N]?
4个回答
展开全部
a表示是数组a的首地址,(*a)[N]表示二维数组中的一维的首地址如:a[3][3]中a[3]表示a[3][0]
*a表示数组首地址,**a就不代表数组中的地址了。
*a表示数组首地址,**a就不代表数组中的地址了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int t[][N]和int (*t)[N],表示的意义是一样的,都是说t是一个指针,
指向一个包含N个元素的整型数组。
现写一小程序,作用是按行输出二维数组的各个元素
#include<stdio.h>
#include<conio.h>
#define N 5 //列数
void printArray(int (*a)[N],int rows)//运行过后再改为int a[][N]试下
{
for(int i=0;i<rows;i++)
{
for(int j=0;j<N;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");//换到下一行
}
}
int main()
{
int a[3][5]={{1,2,3},{3,4,5,6},{5,6,7,8,9}};
//int **b=a;这个赋值不行,因为a是int*[5] 类型
//int (*b)[5]=a;这个可以运行通过
printArray(a,3);
return 0;
}
我用的编译器是C-free,希望这个解释对你有用。
指向一个包含N个元素的整型数组。
现写一小程序,作用是按行输出二维数组的各个元素
#include<stdio.h>
#include<conio.h>
#define N 5 //列数
void printArray(int (*a)[N],int rows)//运行过后再改为int a[][N]试下
{
for(int i=0;i<rows;i++)
{
for(int j=0;j<N;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");//换到下一行
}
}
int main()
{
int a[3][5]={{1,2,3},{3,4,5,6},{5,6,7,8,9}};
//int **b=a;这个赋值不行,因为a是int*[5] 类型
//int (*b)[5]=a;这个可以运行通过
printArray(a,3);
return 0;
}
我用的编译器是C-free,希望这个解释对你有用。
追问
void fun(int **a,int m)
{
。。。
}
main()
{
。。。
int a[M][M]={0};
fun(a,n);
。。。
}
形参**a是二维指针,实参a是数组首地址,这样不行吗?谢谢
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
**a 表示一个指向指针的指针标量a,后两种是函数传参的形式,是语言定义的规范。可直接将A[][]定义为一个指针类型,直接传参 。如
typedef A[n][m] *p2_Darray;
p2_Darray;
fan(p2D);
typedef A[n][m] *p2_Darray;
p2_Darray;
fan(p2D);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的fun(a)中a是什么数据类型?
无论哪种数据类型,**a这种数据类型不存在,你自然不能把它当作形参了!
无论哪种数据类型,**a这种数据类型不存在,你自然不能把它当作形参了!
追问
void fun(int **a,int m)
{
。。。
}
main()
{
。。。
int a[M][M]={0};
fun(a,n);
。。。
}
形参**a是二维指针,实参a是数组首地址,这样不行吗?谢谢
追答
不好意思,以前的回答太愚蠢了!学艺不精,二维指针存在的!
你的**a是二维指针可以,但**a这个二维指针的形式是错的!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询