找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1407|回复: 10
收起左侧

请教C语言中的程序算法理解问题

[复制链接]
ID:521921 发表于 2019-7-16 11:37 | 显示全部楼层 |阅读模式
各位师兄,如下一段程序中,为什么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;
回复

使用道具 举报

ID:584967 发表于 2019-7-16 12:30 | 显示全部楼层
不同的编译器运行环境不一样吧,我用的DEV C++,运行结果就是3,2,1,9
回复

使用道具 举报

ID:215929 发表于 2019-7-16 12:55 | 显示全部楼层
在线学习,哈哈
回复

使用道具 举报

ID:277550 发表于 2019-7-16 13:51 | 显示全部楼层
vc 2008/2015 都是

4,2,1,9
回复

使用道具 举报

ID:183159 发表于 2019-7-16 14:17 | 显示全部楼层
这是我的运行结果
4,2,1,9
a很显然是4,p为什么是9,因为return(a+b+1)的时候,a=3,b=5,自然是9.
回复

使用道具 举报

ID:565305 发表于 2019-7-16 15:36 | 显示全部楼层
a 在前面定义成全局变量,但是在函数里头又有同名的局部变量

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

虽然 dev c 用的是 gcc ,我猜想这个编译器的思路是, 要想用到全局的 a 需要 ::a 方式 才能引用到吧
回复

使用道具 举报

ID:584980 发表于 2019-7-16 15:46 | 显示全部楼层
a是全局变量,在函数传参时是值传递,其本身是不会被改变的,详情百度 【值传递】【地址传递】区别
回复

使用道具 举报

ID:219796 发表于 2019-7-16 15:51 来自手机 | 显示全部楼层
a是全局变量,调用子程序中a=b-1这句a=4-1被改变了值
回复

使用道具 举报

ID:473377 发表于 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
回复

使用道具 举报

ID:565305 发表于 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
回复

使用道具 举报

ID:388197 发表于 2019-7-16 18:39 | 显示全部楼层
这种风格的变量,函数命名老谭的书上最多.而且还没有标准答案,不同的编译器编译出来的结果不一样,如果不是为了考试,去钻研这些问题实在是浪费时间,,赶快把老谭的C语言的书丢垃圾桶,读读<C PRIMER>避免这种问题很简单, 注意不要把函数的传递参数和全局变量同名就好了,而且记住你是在写程序不是在写数学教材,变量 函数的名字应该有实际的含义.趁初学赶快把习惯憋过来,否则到后面坏习惯养成,想改就难了.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表