问题是 Reek 前面提到的手册的一部分。我有变量:
h under 1080 address with value 1020
i under 1020 address with value 1080.
L-value
当将and视为时,计算R-value
表达式 **h 的h
and 。我的回答是,但是教练指南说:。谁对谁错?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.
好的,这是应该工作的代码。如果它按计划工作,则证明在这种情况下 **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;