给出以下代码片段:
int *iptr;
float *fptr;
float fval;
fval = 0.0;
fptr = &fval;
iptr = fptr;
printf("%d \n", *iptr);
fval = 1.0;
printf("%d \n", *iptr);
Run Code Online (Sandbox Code Playgroud)
输出是:
0
1065353216
为什么第一个print语句至少大致匹配与*iptr(0.0)相关的值,但第二个print语句没有?
以下分配仅导致警告.关于C如何对待类型等价,这说了什么?
int *iptr;
float *fptr;
float fval;
fval = 0.0;
fptr = &fval;
iptr = fptr;
Run Code Online (Sandbox Code Playgroud)
特别是,我指的是上面代码片段的最后一行中的赋值; 即,
iptr = fptr;
Run Code Online (Sandbox Code Playgroud) 关于下面的代码片段(用C编写),我有几件事我不明白:
struct T {
int a;
int *b;
struct T *next;
} ;
struct T *p1;
struct T* (*f)(int, int, struct T*);
struct T* g(int a, int b, struct T* c)
{
return (a > b ? c : NULL);
}
f = &g;
p1 = (*f)(4,3,p1);
Run Code Online (Sandbox Code Playgroud)
特别是,这条线是什么意思?
struct T* (*f)(int, int, struct T*);
Run Code Online (Sandbox Code Playgroud)
这是一个功能吗?如果是这样,为什么它没有正文,为什么有正式的参数名称似乎缺失?如果缺少身体,这个功能会返回什么?
另外,下面的作业是怎么回事?
f = &g;
Run Code Online (Sandbox Code Playgroud)