C语言,发现的一个问题,望指教.

来源:百度知道 编辑:UC知道 时间:2024/06/07 11:10:25
unsigned int Max(unsigned int ,unsigned int );

void main( void )
{
unsigned int (*ppt)();
unsigned int zz;

ppt=Max;

zz = (*ppt)(34,98);

_NOP();

while(1);
}

unsigned int Max(unsigned int a,unsigned int b)
{
return(a>b?a:b);
}

问题:(1)Max函数的声明在主函数内和主函数外有什么区别没有?我发现对这个程序的结果是没有影响的,那什么情况会有影响?
(2)这里zz 定义成局部变量时,看不到结果,(或者说根本没有把函数的返回值给zz )但是定义成全局变量就能得到98;有一牛人告诉我是因为局部zz被赋值了,但是没有被操作,所以不可以,那我在主函数里加了zz = zz+1-1;结果还是一样,看不到zz,请大虾帮忙分析!~
函数指针 是该声明为 unsigned int (*ppt)(unsigned int,unsigned int);但是问题还在,莫非是编译器的问题?我用的是做430的,IAR Workbench for msp430 3.42A,呵呵!~谢谢大家!~

(1)函数申明在函数内和函数外肯定是有区别:如果申明在函数外(包括主函数),则在该申明语句以下的所有函数都能调用该函数;反之,如果申明在函数内,则只在这个函数内调用该函数。因为你这个程序只有一个main函数和一个MAX函数,所以不管max申明在main函数内还是外,main 都能调用。
(2)你的这个程序没有输出语句吧,怎么能看得到?我的编译器是dev c++,zz为局部变量时,可以看到结果。(全局变量就不用说了)
程序如下:

#include<stdio.h>
unsigned int Max(unsigned int a,unsigned int b) ;
int main()
{
unsigned int (*ppt)(unsigned int,unsigned int);
unsigned int zz;

ppt=Max;

zz = (*ppt)(34,98);
printf("zz=%u\n",zz);

getchar();
return 0;
}

unsigned int Max(unsigned int a,unsigned int b)
{
return(a>b?a:b);
}

声明放在主函数内便于检查,可读性更高

1。声明在外面相当于全局变量,在MAIN里面就是局部变量,对于你这个程序来说,全局和局部变量,MAIN函数都可以用,所以没区别。

2。你的ppt声明有问题,
改成unsigned int (*ppt)(unsigned int,unsigned int); 试试

我试了一下,定义成局部的也就是你现在的这个程序,也是有结果的=98

没有发现楼主说的问题:不知道搂主使用什么手段查看ZZ的值

unsigned int Max(unsigned int ,unsigned int );