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;
}


原文地址:https://www.cnblogs.com/xiaoyesoso/p/4234442.html