Beyond平君

导航

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

 

posted on 2015-06-04 17:03  Beyond平君  阅读(1464)  评论(0编辑  收藏  举报