标题: 请教C语言中的程序算法理解问题 [打印本页]

作者: WGL88    时间: 2019-7-16 11:37
标题: 请教C语言中的程序算法理解问题
各位师兄,如下一段程序中,为什么a = 3,而不是4呢? p=9又是怎么算来的?麻烦帮小弟理解下这段程序的算法,谢谢!

#include<stdio.h>
int c, a=4;
int func(int a, int b)
{
   c = a*b;
   a = b-1;
   b++;
   return(a+b+1);
}
void main()
{
int b=2,p=0,c=1;
p = func(b , a);
print("%d,%d,%d,%d\n",a,b,c,p);
}


程序运行结果为:3,2,1,9;

作者: 木木哒的木木    时间: 2019-7-16 12:30
不同的编译器运行环境不一样吧,我用的DEV C++,运行结果就是3,2,1,9
作者: Evan.LRW    时间: 2019-7-16 12:55
在线学习,哈哈
作者: devcang    时间: 2019-7-16 13:51
vc 2008/2015 都是

4,2,1,9
作者: xujing    时间: 2019-7-16 14:17
这是我的运行结果
4,2,1,9
a很显然是4,p为什么是9,因为return(a+b+1)的时候,a=3,b=5,自然是9.
作者: egypt    时间: 2019-7-16 15:36
a 在前面定义成全局变量,但是在函数里头又有同名的局部变量

按道理 全局变量为大; 局部变量只影响它所在的域,试过一下 vc6 vc2013 都是很标准的 a=4 , 符合常规思路

虽然 dev c 用的是 gcc ,我猜想这个编译器的思路是, 要想用到全局的 a 需要 ::a 方式 才能引用到吧
作者: xldz    时间: 2019-7-16 15:46
a是全局变量,在函数传参时是值传递,其本身是不会被改变的,详情百度 【值传递】【地址传递】区别
作者: sldx    时间: 2019-7-16 15:51
a是全局变量,调用子程序中a=b-1这句a=4-1被改变了值
作者: 460142704    时间: 2019-7-16 16:28
我用的CODE:BLOCKS得到的结果是4.2.1.9,a可能是由于编译环境不同而不同的,在main函数中p = func(b,a)就是将b = 2,a = 4赋给了func函数作为实参,即使得func中int a = 2,int b = 4,return返回的结果为9,即main函数中p等于9
作者: egypt    时间: 2019-7-16 18:34
sldx 发表于 2019-7-16 15:51
a是全局变量,调用子程序中a=b-1这句a=4-1被改变了值

你可能漏看了 int func(int a, int b)  这个地方,在入口参数处定义了 int a 这个局部变量

所以这个是编译器问题,我在 vc 两个版本都试过是 4 2 1 9 ,而不是 dev c++ 的 3 2 1 9
作者: cjm82    时间: 2019-7-16 18:39
这种风格的变量,函数命名老谭的书上最多.而且还没有标准答案,不同的编译器编译出来的结果不一样,如果不是为了考试,去钻研这些问题实在是浪费时间,,赶快把老谭的C语言的书丢垃圾桶,读读<C PRIMER>避免这种问题很简单, 注意不要把函数的传递参数和全局变量同名就好了,而且记住你是在写程序不是在写数学教材,变量 函数的名字应该有实际的含义.趁初学赶快把习惯憋过来,否则到后面坏习惯养成,想改就难了.




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1