• c指针提高


    今天看了两章C语言,于是乎编段程序复习下。
     
    还是不清楚这些神奇的东西的到底要干嘛用。。。
     
    敲完后,显得这段代码高大上
     但是,想实现这个程序,需要这么写的复杂吗?==||  

     


      


      

    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    #include <string.h>
    #define add(a,b) strcpy(a,b) //带参数的宏定义
    
    int f1(char c[])
    {
     int n;
     printf("%s,请写作一首藏头诗:
    请输入诗歌的行数:
    ",c);
     scanf("%d",&n);
     return n;
    }
    
    char* fun(int (*fp)(char []),char name[],char head[]) // int (*fp)(char []) 为函数参数
    {
    char str[20];int i,j;
    char **pc;//二级指针
    char *test1[20];
            int n=(*fp)(name);
           for(i=0;i<n;i++)
    {
           scanf("%s",str);//动态输入多个字符串
    test1[i]=(char*)malloc(sizeof(char)*(strlen(str)+1));
    //分配len(str)+1个char大小的空间
       add(test1[i],str); //宏定义
    }
    
        pc=test1;//test,即指针数组的数组名 本身也就是 二级指针
    for(j=0;j<i;j++)//汉字为两个字符
    {
       head[2*j]=*(*(pc+j));
    //*pc=test1[0] ,*(pc+j)=test1[j],*(*(pc+j))=*(test1[j])
    head[2*j+1]=test1[j][1];//=*(*(pc+j)+1)) 
    }
    head[2*j]='';
    return head;
    }
    
    int main()
    {
    while(1)
    {
      char name[20],head[20]; 
           int (*pf)(char []);//指向函数的指针。参数为字符数组,返回值为int
      printf("同学,请输入你的姓名:
    ");
      scanf("%s",name);
           pf=f1;//指向函数f1
      printf("谜底是:%s
    
    ",fun(pf,name,head));//pf作为函数实参
    }
       return 0;
    }


  • 相关阅读:
    77、Android设置虚线、圆角、渐变
    c# 制作自定义控件并生成dll文件旷展到其他项目使用
    VB ListView罗列图片
    (壹)、java面向对象详解
    php基本语法
    1.单例模式
    Memcached详解
    MySql的优化
    页面静态化详解
    mysql常用知识点
  • 原文地址:https://www.cnblogs.com/xiaoyesoso/p/4234442.html
Copyright © 2020-2023  润新知