找回密码
 注册
搜索
查看: 1187|回复: 8

C:指针传递的问题急急

[复制链接]
发表于 2009-9-29 22:56:49 | 显示全部楼层 |阅读模式
在程序调试过程中出现这个问题,在指针传递的过程中,比如我想改变传递的实参的值。本来编译是没问题的,但现在我传递的是个结构体变量。如下:
先定义了个结构体
typedef struct
{
    unsigned char year;
    unsigned char month;
    unsigned char date;
    unsigned char hour;
    unsigned char minute;
    unsigned char day;
}clock;
static void Add_Chg_Sub(unsigned char *hr,unsigned char*min,unsigned char flg);
main()
{
    unsigned char flg;
    Add_Chg_Sub(&clock.hour,&clock.minute,flg);
}

static void Add_Chg_Sub(unsigned char *hr,unsigned char*min,unsigned charflg)
{
  *hr += 1;
  *min += 1;

}

如此编译无法通过,报错溢出。将函数static void Add_Chg_Sub(unsigned char *hr,unsigned char*min,unsigned char flg)改为
static void Add_Chg_Sub(unsigned char **hr,unsigned char**min,unsigned char flg),hr和min前面变为两个星号编译可通过,不知为何,现在操作的话改变的是否
还是clock.hour和clock.minute 的值?
发表于 2009-9-30 08:53:46 | 显示全部楼层

  *hr += 1;
  *min += 1;
改为
  hr += 1;
  min += 1;
点评回复

使用道具 举报

发表于 2009-9-30 12:09:40 | 显示全部楼层
typedef struct
{
    unsigned char year;
    unsigned char month;
    unsigned char date;
    unsigned char hour;
    unsigned char minute;
    unsigned char day;
}clock;

这是定义了一个struct类型,不是全局变量,要搞清楚哦,所以main函数调用是通不过编译的,因为clock不是变量嘛
把typedef去掉就OK了
点评回复

使用道具 举报

发表于 2009-9-30 12:13:57 | 显示全部楼层
clock clock;
点评回复

使用道具 举报

发表于 2009-9-30 13:44:58 | 显示全部楼层
clock是类型,不是变量,能通过编译????我怎么不觉得[em08]。
建议:
typedef struct
{
    unsigned char year;
    unsigned char month;
    unsigned char date;
    unsigned char hour;
    unsigned char minute;
    unsigned char day;
}clock_info;

clock_info clock={0};
.....


[em12][em12][em12][em12][em12]
点评回复

使用道具 举报

发表于 2009-10-7 13:35:59 | 显示全部楼层
typedef struct clock_info_s {
    unsigned char year;
    unsigned char month;
    unsigned char date;
    unsigned char hour;
    unsigned char minute;
    unsigned char day;
} clock_info_t;

clock_info_t clock;    /* 定义一个clock_info_t类型的变量,全局变量默认为0 */
点评回复

使用道具 举报

发表于 2009-10-8 23:29:38 | 显示全部楼层
靠 走错地方了吧[em08]
点评回复

使用道具 举报

发表于 2010-9-12 10:02:55 | 显示全部楼层
r u missing?
点评回复

使用道具 举报

发表于 2011-3-1 12:18:38 | 显示全部楼层
如此编译无法通过,报错溢出。将函数static void Add_Chg_Sub(unsigned char *hr,unsigned char*min,unsigned char flg)改为
static void Add_Chg_Sub(unsigned char **hr,unsigned char**min,unsigned char flg),hr和min前面变为两个星号编译可通过,不知为何,现在操作的话改变的是否还是clock.hour和clock.minute 的值



hr和min前面变为两个星号 是指向指针的指针,即双重指针。那么定义双重指针后 *hr;*min现在的值都变成一个引用的地址了,所以编译能通过。另外clock是VC中定义的一个类型,5# 6#楼的兄弟说的很对,要修改
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-25 09:47 , Processed in 0.047527 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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