指向數組的指針,先初始化一個數組,使用傳統方式遍歷數組
1 void main() 2 { 3 int a[5] = { 1,2,3,4,5 }; 4 for (int i = 0; i < 5; i++) 5 { 6 printf("%d,%x\n", a[i], &a[i]); 7 printf("%d,%x\n",*(a+i),a+i); //等價 a[i] , &a[i] 8 } 9 }
a就是數組a的首地址,即元素1的地址, a + 1 表明 地址+1,即這裏就是增長 int型 4字節的長度, 指向下一個地址即元素2的地址spa
1 int a[5] = { 1,2,3,4,5 }; 2 int *p = NULL; //建立一個空指針 3 p = a;//p是一個指針變量,a就是 數組首地址 元素1的地址
由於咱們利用指針遍歷一樣能達到效果指針
1 //利用指針循環 2 for (int *pp = a; pp<a+5; pp++) //地址++ 3 { 4 printf("%d,%x\n",*pp, pp); 5 }
有了上面的理解,指針結構體實際上是同樣的。code
1 //指針結構體 2 struct info 3 { 4 char name[50]; 5 int id; 6 }; 7 8 void main() 9 { 10 struct info myinfo[5] = { {"zc1",1},{ "zc2",2 }, {"zc3",3}, {"zc3",3}, {"zc4",4} }; 11 12 //常規方式輸出 13 for (int i = 0; i < 5; i++) 14 { 15 printf("%s,%d\n",myinfo[i].name, myinfo[i].id); 16 //指針 17 printf("%s,%d\n", (*(myinfo+i)).name, (*(myinfo + i)).id); 18 } 19 20 //利用指針循環,指針結構體 21 struct info *px = myinfo; 22 for (; px < myinfo; px++) 23 { 24 printf("%s,%d\n", px->name, px->id); //指針結構體輸出方式 指針變量->屬性 25 printf("%s,%d\n", (*px).name, (*px).id); //指針結構體輸出方式 *指針變量.屬性 26 // px->id等價 (*px).id 27 } 28 29 getchar(); 30 31 }