我正在准备期中考试,跟不上这门课。
在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;
}发布于 2015-02-26 23:55:02
第一个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在规范末尾引入到格式化中。它最初提供给具有int a的R结构。它将成为S结构f的q部分。
发布于 2015-02-26 23:57:21
u.q.a从x(类型为struct R)获取整数a的值。实际上,u.q.a与x.a相同,因为u(类型为struct S)中的指针q指向x的地址。
注:请对变量使用有意义的名称,以避免混淆,并使代码更容易和更快地阅读。
https://stackoverflow.com/questions/28746402
复制相似问题