我正在学习期中考试,而且我在参加这个课程时遇到了麻烦。
在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;
}
答案 0 :(得分:2)
第一个printf应该打印“Jello,3.14159”我按照它打印的方式 Jello,3.14但不是159 ......
和
“u.q.a”指向哪里?
两者都在一起回答。以下是相关输出:
3.14159
来自printf格式:%.2lf%d
。 3.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.a
从a
(类型x
)获取整数struct R
的值。实际上,u.q.a
与x.a
相同,q
(类型u
)中的指针struct S
指向x
的地址。
由于a
中x
的值设置为159,因此会从第一个%d
的最后printf
打印出来。
PS:请为变量使用有意义的名称,以避免混淆,使代码更容易,更快速地阅读。