今天看了两章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; }