c指针提高

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

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,请写作一首藏头诗:\n请输入诗歌的行数:\n",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]='\0';
return head;
} int main()
{
while(1)
{
char name[20],head[20];
int (*pf)(char []);//指向函数的指针。参数为字符数组,返回值为int
printf("同学,请输入你的姓名:\n");
scanf("%s",name);
pf=f1;//指向函数f1
printf("谜底是:%s\n\n",fun(pf,name,head));//pf作为函数实参
}
return 0;
}
上一篇:优化MVC,实现数据库表的记录的添加、删除、修改、查询。


下一篇:学习WebSocket(二):使用Spring WebSocket做一个简单聊天室