#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 主要的位址是如何改變的
看蠻久還是搞不太清楚
麻煩您了 謝謝