(*a)[]与(*a)[][]问题,c语言

画红色线那里,为啥写(*a)[N][N]就程序不能运行,写(*a)[N]就可以?正确程序如下:#include<stdio.h>#defineN7/**********f... 画红色线那里,为啥写(*a)[N][N]就程序不能运行,写(*a)[N]就可以?正确程序如下:#include <stdio.h>#define N 7/**********found*********/void fun(int (*a)[N]){ int i,j,k,m; if(N%2==0) m=N/2 ; else m=N/2+1; for(i=0; i<m; i++) {/**********found**********/ for(j=i; j<N-i; j++) a[i][j]=a[N-i-1][j]=i+1; for(k=i+1; k<N-i; k++)/**********found**********/ a[k][i]=a[k][N-i-1]=i+1; }}main(){ int x[N][N]={0},i,j; fun(x); printf("\nThe result is:\n"); for(i=0; i<N; i++) { for(j=0; j<N; j++) printf("%3d",x[i][j]); printf("\n"); }} 展开
 我来答
江花海松
2018-09-14
知道答主
回答量:2
采纳率:0%
帮助的人:1577
展开全部

#include <conio.h>

#include <stdio.h>

#define  M 10

int  a[M][M] = {0} ;

/**************found**************/

void fun(int *a[][M], int m)//不理解为啥(*a)[M][M],*a[M]不行, *a[][M]可行,(*a)[M],也好使

{  int j, k ;

for (j = 0 ; j < m ; j++ )

for (k = 0 ; k < m ; k++ )

/**************found**************/

a[j][k] = (k+1) * (j+1);

}

main ( )

{  int  i, j, n ;

printf ( " Enter n : " ) ;  scanf ("%d", &n ) ;

fun ( a, n ) ;

for ( i = 0 ; i < n ; i++)

{    for (j = 0 ; j < n ; j++)

printf ( "%4d", a[i][j] ) ;

printf ( "\n" ) ;

}

}

请看这个例子,,使用不对就出现这个情况

(*a)[M]和*a[M][M]这两个都可以,   *a[M],(*a)[M][M]就不行,  这是由于你没理解:指针数组和数组指针的区别,

int *a[n]是指针数组(也就是说其本质上是数组,但里面存放的都是指针)
int (*a)[n]是数组指针(本质上是一个指针,而且是一个指向数组的指针)

仙戈雅3n
2017-09-20 · TA获得超过5788个赞
知道大有可为答主
回答量:2398
采纳率:75%
帮助的人:857万
展开全部
(*)[n]是指向由n个元素组成的一维数组的指针。你可以理解为行指针。通常可以指向一维二维数组。
(*)[][] 通常是指向三维四维数组的指针。
追问
那(*a)[N]如果表示二维数组那只知道行,那列不就不确定了嘛,怎么判断是哪一列?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式