• 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         //判断字符串最后一个字符是否位 '@' 是:替换位''
    20         int len = (int)strlen(p[i]);
    21         if(*(*(p+i)+(len-1)) == '@')
    22         {
    23             *(*(p+i)+(len-1)) = '';
    24         }
    25 //        if(p[i][len-1] == '@')
    26 //        {
    27 //            p[i][len-1] = '';
    28 //        }
    29         //当读取到单个字符位'
    '时,跳出循环
    30         if(getchar() == '
    ')
    31         {
    32             break;
    33         }
    34     }
    35     
    36     for(int i=0;i<cnt;i++)
    37     {
    38         printf("%s
    ",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
    ");
     6 }
     7 void p_hello(void)
     8 {
     9     printf("hello
    ");
    10 }
    11 void p_welcome(void)
    12 {
    13     printf("welcome
    ");
    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
  • 相关阅读:
    IntellJ IDEA快捷键
    【Java基础】Java 增强型的for循环 for each
    Markdown简易入门
    kafka性能调优
    百度地图 libBaiduMapSDK_base_v4_2_1.so" is 32-bit instead of 64-bit错误
    centos7防火墙firewalld拒绝某ip或者某ip段访问服务器任何服务
    华为策略路由配置
    Windows Server 2012 R2 英文版安装中文语言包教程更改为中文版
    linux修改网卡名为eth0
    华为路由配置IPSec
  • 原文地址:https://www.cnblogs.com/BeyondAverage0908/p/4552349.html
Copyright © 2020-2023  润新知