程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言——指針習題,指針習題

C語言——指針習題,指針習題

編輯:關於C語言

C語言——指針習題,指針習題


寫一篇好博文很難

為了更好的理解指針中幾個不容易清楚的概念:指針數組,數組指針,函數指針,指針函數,利用函數指針回調函數。

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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved