私はC認定試験に合格する準備をしており、練習問題の1つは本当に私を困惑させています。私の練習のC認定試験で暗号解読コードを解読するのに助けが必要
#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;
}
私が書き留めするつもりです:私は(はい、私はこのコードは不自然ですけど、それは私がこの証明書試験に合格するために取り扱っておりますものです)私はこのコードを理解するのに役立ちますいくつかのCの専門家を期待しています私は各行が信じていることを確認し、訂正するでしょう。
1:float型へのポインタである変数tを定義します。このシステムがどのくらいのタイプで動作しているのか分からないので、どのくらいの大きさのメモリが割り当てられているかを知る方法はわかりません。割り当て後、ポインタを移動する必要があると思う1を追加しますが、確実ではありません
2:ポインタを元に戻しますか?
3:メモリに8.0トンによって
4指さ値を割り当て:8.0(* T)4.0で割りと2を思い付くが、私はtは、[1]であるかを理解していませんこの場合
5:ポインタを移動しますか?しかし、ここでこれは*型フロートの
6であるので:
7(* tはこの時点であるものを見つけ出すことができなかった)バック1をポインタを移動し、*のT/2.0を代入:プリントアウト値はトンによる
8指さ:密接に見ていない--t
によって指されたメモリを解放し、サイズ 'はsizeof(フロート)*はsizeof(フロート)'奇妙に見えます。通常、サイズの計算は '(1要素のサイズ)*(要素の数)'になります。また、彼らは[あなたは 'malloc()'の結果をCでキャストしてはいけないと言います(http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc)。 – MikeCAT
ああ、この場合、 '+'演算子を得るためにはキャストが必要です。 – MikeCAT
このコードは、未定義の可能性があります。 'malloc()'が 'NULL'を返した場合、プログラムは予期しない動作をします。 'malloc()'が有効なポインタを返す場合にのみ、すべての動作を説明することができます。 –