C 从函数引用数组

C 从函数引用数组,c,arrays,function,C,Arrays,Function,我为时钟编写了一个代码,并创建了一个函数来显示存储在数组time[]中的时间 char time[]="23:59:45 "; char display_time(char *t[], char *, char *, char *); void main(void) { display_time(&time, &hr, &min, &sec); GLCD_GoTo(5,3)

我为时钟编写了一个代码,并创建了一个函数来显示存储在数组time[]中的时间

char time[]="23:59:45         ";
char display_time(char *t[], char *, char *, char *);

void main(void)             
{
            display_time(&time, &hr, &min, &sec);
            GLCD_GoTo(5,3);
            GLCD_WriteString(time, Font_System7x8);
}
这是我的职责

char display_time(char *t[], char *h, char *m, char *s)
{

                *t[0]=*h/10+48;
                *t[1]=*h%10+48;
                *t[3]=*m/10+48;
                *t[4]=*m%10+48;
                *t[6]=*s/10+48;
                *t[7]=*s%10+48;


}
一切正常,但我的时间没有得到更新,只显示初始化值。

  • 请使用警告进行编译(gcc-Wall-Wextra)
  • 显示时间应返回空值
  • main应返回int并采用
    (int,char*[])
    ()
    ,但不能采用
    (void)
  • 您可以通过传递值(而不是指针)来提高可实现性
  • 使用
    '0'
    代替48,同样是为了便于理解
  • 您没有初始化hr。代码中的分钟和秒
  • 您应该测试h是否在0和24之间等
  • 您应该测试空指针
  • display\u time
    不“显示时间”,为函数写一个更好的名称,就完成了:-)


你的类型不对。您不应该发送
char*t[]
,因为您没有传递指针数组。此外,您可能没有意识到,但是
&time
time
相同,没有“时间地址”。你只想把char*传递给你的函数。

如果你在课堂上学习了
void main(void)
,是时候换讲师了。将你的编译器警告级别提高到最高。。请注意警告:您从未显示本应实际更新时间的代码。我假设在某个地方您确实在时间[]中修改了值,您应该发布执行此操作的代码,这样我们才能真正看到可能出现的错误。该代码中的操作顺序让我感到眩晕。您可能打算这样调用您的函数:
display\u time(time,&hr,&min,&sec)-没有时间上的符号和。你说的
&time
time
相同是什么意思?数组声明就是这样工作的。试试看,执行printf(“%x%x”,&time,time);,它会打印两个相同的地址据我所知,它们不同,因为它们的类型不同<代码>时间
字符[9]
时间
字符*
。对
printf
的调用是,这是一个变量函数,在那里有一个int的隐式转换(因为
%x
需要一个无符号十六进制整数)。@GiovanniFunchal,这不是影响所发布问题行为的函数差异。在引擎盖下,char[]和char*是相同的。我的观点是,执行*t[0]是错误的,因为它应该是t[0]No char[]和char*不一样
char[]
表示某处有一个数组并指示其地址,而
char*
表示某处有一个数组加上指向该数组的指针并指示该指针。
void display_time(char t[], int h, int m, int s) {
    t[0] = h / 10 + '0';
    t[1] = h % 10 + '0';
    t[3] = m / 10 + '0';
    t[4] = m % 10 + '0';
    t[6] = s / 10 + '0';
    t[7] = s % 10 + '0';
}

int main(int, char*[]) {
    char time[] = "23:59:45";
    int hr = 3, min = 9, sec = 42;
    display_time(time, hr, min, sec);
    GLCD_GoTo(5,3);
    GLCD_WriteString(time, Font_System7x8);
    return 0;
}