打印
[PIC®/AVR®/dsPIC®产品]

关于C语言指向结构体数组的指针的问题

[复制链接]
1167|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sunflower860|  楼主 | 2014-1-21 11:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
首先,请看以下程序段:

//声明变量部分
volatile uchar MM[5];

struct DT
{
    uint Day;
    uchar Day_Number[5];
    uint Hour;
    uchar Hour_Number[5];
    uint Min;
    uchar Min_Number[5];
    uint Sec;
    uchar Sec_Number[5];
    uint MS;
    uint MS_Number[5];
};

struct VT
{
    uchar progress;
    uchar stage;
    uchar Recharge_No;
    struct DT Time0;
    struct DT Time1;
    struct DT Time2;
    struct DT Time3;
    struct DT Time4;
};
volatile struct VT F_VT, K_VT;

//声明函数部分
void Num_Dismantle(uint var, uchar Number[])
{
     Number[0] = var % 10;
     Number[1] = (var%100) / 10;
     Number[2] = (var%1000) / 100;
     Number[3] = (var%10000) / 1000;
     Number[4] = var / 10000;
}

//主程序部分
void main()
{
F_VT.Time1.Hour = 18;
Num_Dismantle(F_VT.Time1.Hour, MM);
Num_Dismantle(F_VT.Time1.Hour, F_VT.Time1.Hour_Number);
Num_Dismantle(F_VT.Time1.Hour, & (F_VT.Time1.Hour_Number));
}

运行结过,Num_Dismantle函数的第一次调用是没有问题的,结果是:MM[0]为8,MM[1]为1。可第二个和第三个就都不对了,肯定指针这里调用的有问题,恳请指正!
沙发
ayb_ice| | 2014-1-22 11:21 | 只看该作者
第二次,第三次指向了不同的空间,应该查看对应的的空间
建议写成这样,不容易误解

        F_VT.Time1.Hour = 18;
        Num_Dismantle(F_VT.Time1.Hour, &MM[0]);
        Num_Dismantle(F_VT.Time1.Hour, &F_VT.Time1.Hour_Number[0]);
        Num_Dismantle(F_VT.Time1.Hour, &F_VT.Time1.Hour_Number[0]);


void Num_Dismantle(uint var, uchar Number[])
{
        for(char i=0; i<5; i++){
                Number[i] = var % 10;
                var /= 10;
        }
}

使用特权

评论回复
板凳
8411240410| | 2014-5-25 00:08 | 只看该作者
我在PIC16F1829的一个产品中也碰到类型问题? 请问你最后怎样解决的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

18

帖子

0

粉丝