【发布时间】:2015-02-26 15:29:10
【问题描述】:
我正在准备期中考试,但我在学习这个课程时遇到了问题。
在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;
}
【问题讨论】:
-
您的意思是标记这个 C,而不是 C++? (希望如此!)
-
他们真的教你像这样的 C++ 吗?多么不幸。
-
u.q.a持有x.a的副本,而x.a又被初始化为159 -
struct R x = { "Jello", 159 };159 被放入int a;instruct r? -
是的。你认为它还能做什么?在您最喜欢的 C 或 C++ 教科书中阅读聚合初始化。
标签: c pointers struct printf naming