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

c指针提高的更多相关文章

  1. C和指针小结(C/C++程序设计)

    C和指针 相关基础知识:内存的分配(谭浩强版) 1.整型变量的地址与浮点型/字符型变量的地址区别?(整型变量/浮点型变量的区别是什么) 2.int *p,指向整型数据的指针变量. 3.通过指针变量访问 ...

  2. 对B+树与索引在MySQL中的认识

    [TOC] 概述 本质:数据库维护某种数据结构以某种方式引用(指向)数据 索引取舍原则:索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数 B树 满足的条件 d为大于1的一个正整数,称为B-Tre ...

  3. iOS多线程杂论

    iOS多线程的分布 (1) NSThread (2) NSOperation (3) GCD 现在对下面三个进行一个个的分析,希望那里说得不对的地方希望简友们帮我指点一二. 1,NSThread 优点 ...

  4. MongoDB 及 Mysql 背后的 B/B+树

    索引是数据库常见的数据结构,每个后台开发人员都应该对索引背后的数据结构有所了解. 本文通过分析B-Tree及B-/+Tree数据结构及索引性能分析及磁盘存取原理尝试着回答一下问题: 为什么B-Tree ...

  5. leveldb学习:skiplist

    leveldb中的memtable仅仅是一个封装类,它的底层实现是一个跳表. 跳表是一种基于随机数的平衡数据结构.其它的平衡数据结构还有红黑树.AVL树.但跳表的原理比它们简单非常多.跳表有点像链表, ...

  6. 从入门到自闭之Python--MySQL数据库的多表查询

    多表查询 连表: 内连接:所有不在条件匹配内的数据们都会被剔除连表 select * from 表名1,表名2 where 条件; select * from 表名1 inner join 表名2 o ...

  7. C语言提高 (4) 第四天 数组与数组作为参数时的数组指针

    1昨日回顾 const int 和 int const是一样的 const char *p;值不变 char * const p; 指针不能变 编译器对参数的退化: 第三种模型: 三级指针 三级指针局 ...

  8. C语言提高 (3) 第三天 二级指针的三种模型 栈上指针数组、栈上二维数组、堆上开辟空间

    1 作业讲解 指针间接操作的三个必要条件 两个变量 其中一个是指针 建立关联:用一个指针指向另一个地址 * 简述sizeof和strlen的区别 strlen求字符串长度,字符数组到’\0’就结束 s ...

  9. C语言提高 (2) 第二天 用指针对字符串进行操作

    2 昨日回顾 p++: (把地址转换成整型 加上它所指向的数据的大小 3指针成立条件和间接赋值 条件一:有两个变量 其中至少一个是指针 条件二:建立关联 条件三:间接操作 4间接操作的例子 5间接操作 ...

随机推荐

  1. Ubuntu14.04 搭建 node.js 环境(Binaries方式)

    从官网下载 http://nodejs.org/download/ Linux Binaries (.tar.gz)  下载下来的是node-v0.10.29-linux-x64.tar.gz文件 解 ...

  2. linux 文件系统(inode和block)

    linux文件系统(inode block superblock)   先说一下格式化:每种操作系统所设置的文件属性/权限并不相同,为了存放这些文件所需的数据,因此就需要将分区格式化,以成为操作系统能 ...

  3. 洛谷P1717 钓鱼

    P1717 钓鱼 41通过 116提交 题目提供者该用户不存在 标签贪心 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 暂时没有讨论 题目描述 话说发源于小朋友精心设计的游戏被电脑组的童鞋 ...

  4. Unity3d之截图

    1.Application.CaptureScreenshot("Screenshot.png", 0); 2. exture2D CaptureScreenshot2(Rect  ...

  5. js验证连续两位数字递增或递减和连续三位数字相同

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  6. PHP面向对象之将数据库的查询结果序列化成json格式

    <?php class link_mysql{ private $host,$uid,$pwd,$db,$link,$res; function link_mysql($_host,$_uid, ...

  7. JAVA环境变量JAVA_HOME、CLASSPATH、PATH设置详解

    Windows下JAVA用到的环境变量主要有3个,JAVA_HOME.CLASSPATH.PATH.下面逐个分析. JAVA_HOME 指向的是JDK的安装路径,如C:\jdk1.5.0_06,在这路 ...

  8. Runtime学习与使用(一):为UITextField添加类目实现被键盘遮住后视图上移,点击空白回收键盘

    OC中类目无法直接添加属性,可以通过runtime实现在类目中添加属性. 在学习的过程中,试着为UITextField添加了一个类目,实现了当TextField被键盘遮住时视图上移的功能,顺便也添加了 ...

  9. ios 中的block应用

    在这个大冬天里默默敲着键盘,勿喷.今天学习swift过程中,学习到闭包,发现闭包和oc的block中有很多的相同之处,又重新学习了一下并且学习了一些高级点的用法,内容如下: 1.block格式说明:( ...

  10. 滚动视图和页面控制UIScollView,UIpageControlDemo

    ////  ViewController.m//  UIScollView////  Created by hehe on 15/9/25.//  Copyright (c) 2015年 wang.h ...