编译出现: 警告 8_2_1.c 42: 指针转换后指向其它类型在 main 函数中?为什么?

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 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;

creategraph(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();
}
====================================================
编译出现这一句:
警告 8_2_1.c 42: 指针转换后指向其它类型在 main 函数中
=======================================================
还有这个程序时有结果的。
有一点不是很明白:如何执行的?
creategraph函数的参数是:int *node,int num
怎么在main函数中creategraph的参数是:node,12呢?这时时如何执行的呢?
指针这里很不明白,详细跟我说一下,谢谢。。
把执行的过程说一下行不?
一小步。

德玛西亚99
浏览 148回答 2
2回答

波斯汪

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()函数我新写的,可以实现你说的,但是不会产生警告。其实这种多维数组的传递,确实很考指针

倚天杖

我编的时候没你说的那种情况,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");后来就运行主函数下面没运行的代码了
打开App,查看更多内容
随时随地看视频慕课网APP