Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 结构及;代码解释_C_Pointers_Struct_Printf_Naming - Fatal编程技术网

C 结构及;代码解释

C 结构及;代码解释,c,pointers,struct,printf,naming,C,Pointers,Struct,Printf,Naming,我正在准备期中考试,但我很难跟上这个课程 在int main(void)中,第一个printf应该打印Jello,3.14159 我知道它是如何打印出3.14版的果冻的,但不知道159版的,u.q.a指向哪里 /* 01234567890:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ */ #include <stdio.h> #include <string.h> struct R { char n[6]; int a;

我正在准备期中考试,但我很难跟上这个课程

int main(void)
中,第一个
printf
应该打印
Jello,3.14159
我知道它是如何打印出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;
}
/*01234567890:@ABCDEFGHIJKLMNOPQRSTUVWXYZ*/
#包括
#包括
结构R{
charn[6];
INTA;
};
结构{
双p;
结构rq;
};
结构SF(常数结构R*x){
结构a;
a、 q=*x;
a、 p=3.142;
返回a;
}
字符g(结构R*y){
strcpy_s(y->n,“Wee”);
y->a=3;
返回*y->n;
}
内部主(空){
字符c;
结构单元;
结构rx={“果冻”,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(“%seeeee\n”,x.n);
返回0;
}
第一个printf应该打印“Jello,3.14159”,我遵循它的打印方式 果冻,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;
}
都是一起回答的。以下是相关输出:

3.14159
它来自printf格式:
%.2lf%d
3.14
来自规范的第一部分,
%.2lf
,该部分表示,期望长浮点,以2位精度显示数字。有关
printf
格式的更多信息,请参见维基百科:


159
来自
u.q.a
(它所指的),并由规范末尾的
%d
引入格式。它最初被赋予了
R
结构,该结构具有
int
a
。并且它成为
q
结构的
S
部分,
f

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


PS:请使用有意义的变量来避免混淆,使代码更容易和更快阅读。

你是想标记这个C,而不是C++?(我希望如此)他们真的教你C++吗?多么不幸。
u.q.a
持有一份
x.a
的副本,该副本被初始化为159
struct R x={“Jello”,159}159被放入
inta
struct r?
Yes中。你认为它还能做什么?阅读关于你喜欢的C或C++教科书中的聚合初始化。