質問は、Reek の前述のハンドブックの一部です。変数を取得しました:
h under 1080 address with value 1020
i under 1020 address with value 1080.
andをtoとして扱う場合、式 **h のL-value
andを評価します。私の答えは ですが、講師用ガイドには次のように書かれています。誰が正しくて誰が間違っている?R-value
h
i
pointers
integers
R:1020 L:1080
R:1080, L:1020
Step by step:
R-value first:
h=1020
*h=*(1020)=1080
**h=*(*h)=*(1080)=1020
L-value:
same, but value is address of value 1020, so 1080.
OK、これが動作するはずのコードです。計画どおりに動作する場合、この場合は **h = h であることが証明されます。
#include <stdio.h>
int main(void)
{
unsigned int * h;
unsigned int *i;
unsigned int ans=0;
h=&i;
i=&h;
printf("h=%u &h=%u i=%u &i=%u\n", h, &h, i, &i);
ans=*(unsigned int *)*h;
printf("**h=%u\n", ans);
*(unsigned int *)*h=1;
printf("h=%u &h=%u i=%u &i=%u\n", h, &h, i, &i);
return 0;
}
そして、ここで私が得る出力:
h=3214580856 &h=3214580852 i=3214580852 &i=3214580856
**h=3214580856
h=1 &h=3214580852 i=3214580852 &i=3214580856
最後の行で **h=1; を実行しました。