2 回答

TA贡献1811条经验 获得超4个赞
int node[12][2]
所以系统默认node应该是赋值给一个指向数组长度为2的指针。
也就是说
你应该让它赋值给它默认的才不会有警告,而你程序中
是赋值给一个指向一个数字的指针,也就是长度为1.
void creategraph(int *node,int num)
所以,才会产生警告。
下面我改了下你的程序,也可以输出结果,但是没有警告了。
#include <stdio.h>
typedef int intarray[2];
int matrix[6][6];
/*创建图 */
void creategraph(int *node,int num)
{
int from; /*边的起点*/
int to; /*边的终点*/
int i;
for(i=0;i<num;i++)
{
from=node[i*2];
to=node[i*2+1];
matrix[from][to]=1;
}
}
void creategraph1(intarray *node,int num)
{
int from; /*边的起点*/
int to; /*边的终点*/
int i;
for(i=0;i<num;i++)
{
from=*(*(node+i)+0);
to=*(*(node+i)+1);
matrix[from][to]=1;
}
}
/*主程序:创建图后,将邻接矩阵输出*/
void main()
{
int node[12][2]={ {1,2},{2,1},
{1,3},{3,1},
{2,3},{3,2},
{2,4},{4,2},
{3,5},{5,3},
{4,5},{5,4}};
int i,j;
for(i=1;i<=5;i++)
for(j=1;j<=5;j++)
matrix[i][j]=0;
creategraph1(node,12);
printf("graph is:\n");
for(i=1;i<=5;i++)
{for(j=1;j<=5;j++)
printf("%d ",matrix[i][j]);
printf("\n");}
getch();
}
如上,creategraph1()函数我新写的,可以实现你说的,但是不会产生警告。
其实这种多维数组的传递,确实很考指针

TA贡献1828条经验 获得超3个赞
我编的时候没你说的那种情况,
creategraph函数的参数是:int *node,int num
怎么在main函数中creategraph的参数是:node,12呢?
这个问题是形参和实参的问题,LZ想必是刚学编程不久的,建议你看下这方面的资料。主函数调用了函数creategraph,而node,12,是传进去的两个参数,第一个是int型指针,第二个是int型常数。
执行过程:
先从主函数开始,即:void main()
再到int 型二维数组node
当到了creategraph(node,12);时
主函数将调用函数void creategraph(int *node,int num);即跳来
然后把node和12传进去
当函数creategraph运行完后,再跳到主函数creategraph(node,12);的下一句,
即 printf("graph is:\n");后来就运行主函数下面没运行的代码了
添加回答
举报