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

 

你可能感兴趣的:(C语言)