#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct a
{
void *ptr;
unsigned long val;
};
void func(struct a *id,void *ptr)
{
id->ptr = ptr;
if (sizeof(id->val) >= sizeof(id->ptr))
{
id->val = (unsigned long)id->ptr;
}
}
void func2(struct a *id)
{
unsigned char errno;
printf("errno-address=%lu\n", &errno
); func(id,&errno);
}
int main()
{
struct a *id;
func2(id);
printf("after-changing=%lu\n", id
->val
); return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RyaW5nLmg+CiNpbmNsdWRlPHN0ZGxpYi5oPgoKc3RydWN0IGEKewogICAgdm9pZCAqcHRyOwogICAgdW5zaWduZWQgbG9uZyB2YWw7Cn07Cgp2b2lkIGZ1bmMoc3RydWN0IGEgKmlkLHZvaWQgKnB0cikKeyAgICAKICAgIG1lbXNldChpZCwgMCwgc2l6ZW9mKCppZCkpOwoKICAgIGlkLT5wdHIgPSBwdHI7CiAgICBpZiAoc2l6ZW9mKGlkLT52YWwpID49IHNpemVvZihpZC0+cHRyKSkKICAgIHsgICAgCiAgICAgICAgaWQtPnZhbCA9ICh1bnNpZ25lZCBsb25nKWlkLT5wdHI7CiAgICB9CiAgICAKfQp2b2lkIGZ1bmMyKHN0cnVjdCBhICppZCkKewogICAgdW5zaWduZWQgY2hhciBlcnJubzsKICAgIHByaW50ZigiZXJybm8tYWRkcmVzcz0lbHVcbiIsICZlcnJubyk7CiAgICBmdW5jKGlkLCZlcnJubyk7Cn0KCmludCBtYWluKCkKewogICAgc3RydWN0IGEgKmlkOwogICAgaWQgPSBtYWxsb2Moc2l6ZW9mKCppZCkpOwogICAgZnVuYzIoaWQpOwogICAgcHJpbnRmKCJhZnRlci1jaGFuZ2luZz0lbHVcbiIsIGlkLT52YWwpOwogICAgcmV0dXJuIDA7Cn0KCg==