我正在准备参加c认证考试,而实践问题之一确实让我感到困惑。我希望一些C专家可以帮助我理解此代码(是的,我知道该代码是人为设计的,但这是我要通过此cert测试所要处理的内容):
#include <stdio.h>
#include <stdlib.h>
int main(void) {
float *t = 1 + (float *) malloc(sizeof(float) * sizeof(float));
t--;
*t = 8.0;
t[1] = *t / 4.0;
t++;
t[-1] = *t / 2.0;
printf("%f\n",*t);
free(--t);
return 0;
}
我要记下我相信每一行所做的事情以及将要进行的验证/更正。
1:定义变量t,它是类型为float的指针。由于我不知道该系统正在运行多少种类型,因此我不知道如何知道正在分配多少内存。分配后,我们添加1我认为应该移动指针,但不确定
2:将指针移回一个?
3:将值8.0分配给t指向的内存
4:将8.0(* t)除以4.0,得出2,但是在这种情况下,我不明白t [1]是什么
5:移动指针?但是由于这是float类型的
6:将指针移回1并指定* t / 2.0(此时无法确定* t是什么)
7:打印出t指向的值
8:释放--t指向的内存
最佳答案
// Allocate a number of floats in memory
// t points to the second allocated float due to "1 + ..."
float *t = 1 + (float *) malloc(sizeof(float) * sizeof(float));
// t now points to the first allocated float
t--;
// first allocated float is set to 8.0
*t = 8.0;
// second allocated float is set to 2.0 (i.e. 8.0/4.0)
// note: t[1] is the same as *(t + 1)
t[1] = *t / 4.0;
// t now points to the second allocated float
t++;
// first allocated float is set to 1.0 (i.e. 2.0/2.0)
// note: t[-1] is the same as *(t - 1)
t[-1] = *t / 2.0;
// Prints 2.0 as t still points to the second allocated float
printf("%f\n",*t);
// Decrement t, i.e. t points to first allocated float
// and free the memory
free(--t);
// End the program by returning from main
return 0;
关于c - 在我的C认证考试中需要帮助来解密密码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39502659/