指標陣列和陣列指標
阿新 • • 發佈:2021-09-01
計算字串裡的字元個數,不要sizeof和strlen
#include<stdio.h> int main() { char str[]="I love FishC.com!"; char *target=str; int count=0; while(*target++!='\0') { count++; } printf("總共有%d個字元!\n",count); return 0; }
結果
總共有17個字元!
因為陣列名是不可變的,不能為左值,所以要定義一個指標
指標變數是一個左值,而字串變數是一個地址常量,不是一個左值
指標陣列
#include<stdio.h> int main() { int a=1; int b=2; int c=3; int d=4; int e=5; int *p1[5]={&a,&b,&c,&d,&e}; int i; for(i=0;i<5;i++) { printf("%d\n",*p1[i]); } return 0; }
結果
1
2
3
4
5
備註:因為陣列元素存放指標,所以要用取地址
#include<stdio.h> intmain() { char *p1[5]={ "讓程式設計改變世界", "just do it", "一切皆有可能", "gogogogo", "one more thing" }; int i; for (i=0;i<5;i++) { printf("%s\n",p1[i]); } return 0; }
結果
讓程式設計改變世界
just do it
一切皆有可能
gogogogo
one more thing
備註:p1前不加*,加了表示取出字元,但我要的是字串,給出字串的地址
陣列指標
錯誤寫法
#include<stdio.h> int main() { int (*p2)[5]={1,2,3,4,5}; int i; for(i=0;i<5;i++) { printf("%d\n",*(p2+i)); } return 0; }
(因為它是指標,要給它地址才行)
以前學指標是這樣寫的
#include<stdio.h> int main() { int temp[5]={1,2,3,4,5}; int *p=temp; int i; for(i=0;i<5;i++) { printf("%d\n",*(p+i)); } return 0; }
這裡*p指向的是變數,而陣列指標是指向陣列,有所不同
#include<stdio.h> int main() { int temp[5]={1,2,3,4,5}; int (*p2)[5]=&temp; int i; for(i=0;i<5;i++) { printf("%d\n",*(*p2+i)); } return 0; }
可以不寫&