#include <stdio.h>
char ary[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
char *p1 = ary;
char *p2;
int *pn;
void test()
{
p1+=2; //p1[0] = 2
pn = (int*)&p1[2]; //p1[2] = 4, char->int之後,pn[0] = 7
pn+=1; //加完之後pn[0] = 8
p1 = (char*)pn; //pn從int->char,還是維持在原位,所以p1[0]=8
--pn; //因為pn是int型別,做加減法會位移4個byte而不是1個byte,所以pn[0]=4
p2 = (char*)pn; //int->char不會縮減,所以p2[0]=4
--p2; //p2是char,所以只會減1個byte,p2[0]=3
}
int main()
{
test();
printf("*p1 = %d *p2= %d\n", *p1, *p2);
return 0;
}
[answer]*p1 = 8 *p2= 3
您好
回覆刪除想請教您:
pn = (int*)&p1[2]; //p1[2] = 4, char->int之後,pn[0] = 7
這一行中 char->int 主要的位址是如何改變的
看蠻久還是搞不太清楚
麻煩您了 謝謝