结构&代码解释

时间:2015-02-26 15:29:11

标签: c pointers struct printf naming

我正在学习期中考试,而且我在参加这个课程时遇到了麻烦。

int main (void)中,第一个printf应该打印Jello,3.14159 我按照它打印Jello,3.14但不打印159的方式 - u.q.a指向哪里?

/* 01234567890:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ */
#include <stdio.h>
#include <string.h>

struct R {
    char n[6];
    int a;
};

struct S {
    double p;
    struct R q;
};

struct S f(const struct R* x) {
    struct S a;
    a.q = *x;
    a.p = 3.142;
    return a;
}

char g(struct R* y) {
    strcpy_s(y->n, "Wee");
    y->a = 3;
    return *y->n;
}

int main(void) {
    char c;
    struct S u;
    struct R x = { "Jello", 159 };
    u = f(&x);
    printf("%s,%.2lf%d\n", u.q.n, u.p, u.q.a);
    c = g(&x);
    printf("%s,%d.142,%cee\n", x.n, x.a, c);
    x.n[0] -= 3;
    x.n[1] = 'r';
    printf("%seeeeeeeeee\n", x.n);

    return 0;
}

2 个答案:

答案 0 :(得分:2)

  

第一个printf应该打印“Jello,3.14159”我按照它打印的方式   Jello,3.14但不是159 ......

  

“u.q.a”指向哪里?

两者都在一起回答。以下是相关输出:

3.14159

来自printf格式:%.2lf%d3.14来自规范的第一部分%.2lf,它表示期望长浮点数,以2位精度显示数字。有关printf格式设置的更多信息,请参阅维基百科:https://en.wikipedia.org/wiki/Printf_format_string

159来自u.q.a(这是它所指向的),并由规范末尾的%d引入格式。它最初提供给R结构,其中包含int a。它成为q结构的S部分,f

答案 1 :(得分:0)

u.q.aa(类型x)获取整数struct R的值。实际上,u.q.ax.a相同,q(类型u)中的指针struct S指向x的地址。
由于ax的值设置为159,因此会从第一个%d的最后printf打印出来。

PS:请为变量使用有意义的名称,以避免混淆,使代码更容易,更快速地阅读。