OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3910|回复: 8

调试程序时出现一个奇怪的问题,全局变量当函数实参,没有效果,怎么回事?

[复制链接]

18

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2015-1-16
在线时间
28 小时
发表于 2015-6-11 14:08:46 | 显示全部楼层 |阅读模式
5金钱
actEquipMonth = 6;actEquipDay=1;
void dealMonthDay(uint8 Year,uint8 Month,uint8 Day)//2月闰年29天,不闰年28天
{
    if(actEquipDay==0)
    {
        actEquipMonth-=1;
        if(actEquipMonth==0)actEquipMonth=12;
        if(actEquipMonth%2!=0)actEquipDay=31;
        else actEquipDay=30;
        if(actEquipMonth==2)
        {
            if(((Year%4 == 0)&&(Year%100 != 0)) || (Year%400 == 0))//判断闰年            {
                actEquipDay = 29;
            else
                actEquipDay = 28;
        }
    }
//    USART_TXD_Char(actEquipMonth);
}
这个情况毫无疑问输出的是5月31日。

void dealMonthDay(uint8 Year,uint8 Month,uint8 Day)//2月闰年29天,不闰年28天
{
    if(Day==0)
    {
        Month-=1;
        if(Month==0)Month=12;
        if(Month%2!=0)Day=31;
        else Day=30;
        if(Month==2)
        {
            if(((Year%4 == 0)&&(Year%100 != 0)) || (Year%400 == 0))//判断闰年            {
                Day = 29;
            else
                Day = 28;
        }
    }
//    USART_TXD_Char(actEquipMonth);
}
dealMonthDay(TempYear,actEquipMonth,actEquipDay);
以这种情况调用这函数就不起效果了。什么情况?

最佳答案

查看完整内容[请看2#楼]

如果是C++,可以用引用,不过C里面没有,你还想这样的话就只能用指针 void dealMonthDay(uint8 *Year,uint8 *Month,uint8 *Day) {    //所有的变量都要加上 * } 调用的话这样 dealMonthDay(&TempYear,&actEquipMonth,&actEquipDay);
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-6-11 14:08:47 | 显示全部楼层
如果是C++,可以用引用,不过C里面没有,你还想这样的话就只能用指针
void dealMonthDay(uint8 *Year,uint8 *Month,uint8 *Day)
{
   //所有的变量都要加上 *
}
调用的话这样
dealMonthDay(&TempYear,&actEquipMonth,&actEquipDay);
回复

使用道具 举报

18

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2015-1-16
在线时间
28 小时
 楼主| 发表于 2015-6-11 14:08:47 | 显示全部楼层
回复【7楼】Rocks:
---------------------------------
return 就可以了
回复

使用道具 举报

2

主题

239

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2015-6-5
在线时间
110 小时
发表于 2015-6-11 14:21:03 | 显示全部楼层
這是C語言的基礎邏輯問題

一個函數你丟進去的數值 他會生成一個副本在該函數內執行 執行完畢回來就刪除了 不是真身
除非你用指針方式丟進去 他會改變你指定的指針位置數值
回复

使用道具 举报

18

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2015-1-16
在线时间
28 小时
 楼主| 发表于 2015-6-11 14:31:04 | 显示全部楼层
回复【2楼】Rocks:
---------------------------------
..我其他函数也有这么用法,但是没出现这种情况的?
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-6-11 14:57:01 | 显示全部楼层
既然你都用形参了,那输出也用形参啊
 USART_TXD_Char(Month);改成这样不就行了
回复

使用道具 举报

18

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2015-1-16
在线时间
28 小时
 楼主| 发表于 2015-6-11 16:26:47 | 显示全部楼层
回复【4楼】zc123:
---------------------------------
这样是可以,但是我不是用形参输出的,我其他函数还需要实参
回复

使用道具 举报

2

主题

239

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2015-6-5
在线时间
110 小时
发表于 2015-6-11 16:45:57 | 显示全部楼层
回复【3楼】Fong0716:
---------------------------------
那你貼你可以的代碼來瞧瞧
跟你學習如何突破C本身的邏輯限制
回复

使用道具 举报

2

主题

239

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2015-6-5
在线时间
110 小时
发表于 2015-7-31 13:59:32 | 显示全部楼层
return 用法就不是你說的那種了= =
完全是兩回事
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 03:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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