为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

德玛西亚99 2022-05-08 15:10:35
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呢?这时时如何执行的呢?指针这里很不明白,详细跟我说一下,谢谢。。把执行的过程说一下行不?一小步。
查看完整描述

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


查看完整回答
反对 回复 2022-05-10
?
倚天杖

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");后来就运行主函数下面没运行的代码了



查看完整回答
反对 回复 2022-05-10
  • 2 回答
  • 0 关注
  • 147 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号