寫一篇好博文很難
為了更好的理解指針中幾個不容易清楚的概念:指針數組,數組指針,函數指針,指針函數,利用函數指針回調函數。
1.使用指針數組,用不定長的字符串初始化,最後一個字符串以@結尾,輸出所有的字符串,並刪除最後的@字符。
例如:
輸入:aaaaa bbbbb abcdefg asdf@
輸出:
aaaaa
bbbbb
abcdefg
asdf
1 #include <stdlib.h> 2 #include <string.h> 3 int main(int args,const char *argv[]) 4 { 5 char *p[10] = {NULL}; 6 int cnt = 0;//記錄輸入了多少個字符串 7 //申請堆內存空間 8 for(int i=0;i<10;i++) 9 { 10 //申請一個100個char類型的內存空間 11 p[i] = (char *)malloc(100*sizeof(char)); 12 //判斷申請成功 13 if(!p[i]) 14 { 15 return -1; 16 } 17 scanf("%s",p[i]); 18 cnt++; 19 //判斷字符串最後一個字符是否位 '@' 是:替換位'\0' 20 int len = (int)strlen(p[i]); 21 if(*(*(p+i)+(len-1)) == '@') 22 { 23 *(*(p+i)+(len-1)) = '\0'; 24 } 25 // if(p[i][len-1] == '@') 26 // { 27 // p[i][len-1] = '\0'; 28 // } 29 //當讀取到單個字符位'\n'時,跳出循環 30 if(getchar() == '\n') 31 { 32 break; 33 } 34 } 35 36 for(int i=0;i<cnt;i++) 37 { 38 printf("%s\n",p[i]); 39 } 40 return 0; 41 }
2.
利用函數指針回調函數
隨意定義三個函數,利用函數指針調用該三個函數,輸入一個n,打印n次該函數
1 #include <stdlib.h> 2 #include <string.h> 3 void p_world(void) 4 { 5 printf("world\n"); 6 } 7 void p_hello(void) 8 { 9 printf("hello\n"); 10 } 11 void p_welcome(void) 12 { 13 printf("welcome\n"); 14 } 15 //利用函數指針回調以上的三個函數 16 void print(void (*pfunc)(void),int cnt) 17 { 18 for(int i=0;i<cnt;i++) 19 { 20 pfunc(); 21 } 22 } 23 int main() 24 { 25 int n = 0; 26 printf("回調次數:"); 27 scanf("%d",&n); 28 //申明一個指針數組,存放函數名(函數地址) 29 void *pf[3] = {p_world,p_hello,p_welcome}; 30 char *str[3] = {"p_world","p_hello","p_welcome"}; 31 char *inputstr = NULL; 32 inputstr = (char *)malloc(100*sizeof(char)); 33 if(!inputstr) 34 { 35 return -1; 36 } 37 printf("回調的函數名稱:"); 38 scanf("%s",inputstr); 39 for(int i=0;i<3;i++) 40 { 41 if(!strcmp(str[i], inputstr)) 42 { 43 print(pf[i], n); 44 } 45 } 46 //釋放內存空間 47 free(inputstr); 48 inputstr = NULL; 49 return 0; 50 } View Code