在赋值时我试图改变一些东西,事情突然变得复杂得多,结果变得神秘。我不是故意弄脏代码,我只是想比较差异,以帮助自己更好地理解。如何在C中的整数和单个字符赋值时理解指针?
#include <stdio.h>
int main() {
int h = 10;
int *i = &h;
int j = &h;
int *k = h;
printf("%i;%p\n", h, &h);
printf("%p;%i;%p\n", i, *i, &i);
printf("%i;%p;%p\n", j, j, &j); //how to print out h by j?
printf("%i;%p\n\n", k, &k); // how to print out *k?
char a = 'M';
char *b = &a;
char c = &a;
char *d = a;
printf("%c;%p\n", a, &a);
printf("%p;%c;%p\n",b, *b, &b);
printf("%c;%p;%p\n", c, c, &c); //how to print out a by c?
printf("%c;%p\n", d, &d); //how to print out *d?
return 0;
}
结果是:
10;0xbfcef838
0xbfcef838;10;0xbfcef83c
-1076955080;0xbfcef838;0xbfcef840 //where does -1076955080 come from?
10;0xbfcef844
M;0xbfcef836
0xbfcef836;M;0xbfcef848
6;0x36;0xbfcef837 //where does 6 come from?
M;0xbfcef84c
阅读关于指针解引用。 – haccks
你不应该使用'%i'来打印soemthing的*地址*,它总是用十六进制表示地址。 – DrKoch
'如何通过j打印出h?'假设int可以保存一个地址而不会丢失,你可以这样做:'printf(“%d%d \ n”,h,*((int *)j)) ;' –