c语言输出复杂函数 c语言输出函数的三种形式( 二 )


4、有-左对齐(右补空格)
%(+)-m.ns
字符串
一串字符
1.无m、n按实际字符串输出全部字符
2、有m、n仅输出前n个字符,补空格
3.有+(默认为+)右对齐(左补空格)
4、有-左对齐(右补空格)
二:格式输入函数scanf()
1、
调用格式一般为:scanf("格式化控制字符串",地址表列);
2、格式化控制字符串和printf()函数含义相似,所不同的是它是对输入格式进行控制;
3、地址表列是有若干等待输入的数据所对应的内存单元地址组成,由逗号隔开,一般形式为a,a为变量;
4、地址表列在数量和类型上和格式化控制字符串中的格式说明符一一对应;
5、格式字符h表示输入短型数据,可用在d、o、x前面,m指定输入数据所占宽度 , 
*表示对应的数据项读入后不赋给相应的变量 , 更多格式说明符及其组合如下
格式字符
数据对象
输入形式
数据输入方法
%md
int
short
unsigned
int
unsigned
short
十进制整数
1、无m按实际位数输入
2、有m输入m位,不足m则跟回车键
%mo
八进制整数
%mx
十六进制整数
%mld
long
unsigned
long
十进制整数
%mlo
八进制整数
%mlx
十六进制整数
%mlf
float
double
十进制整数
%mle
%mc
char
单个字符
1、无m取单个字符
2、有m输入m位,仅取第一个字符
%ms
字符串
一串字符
1、无m取回车或空格前若干字符
2、有m仅取前m字符
C语言复杂函数 看到这样的表达式估计让不少人都“不寒而栗”了吧 , 其实虽然看起来复杂,但是构造这类表达式其实只有一条简单的规则:按照使用的方式来声明 。
右左法则: 首先从圆括号起,然后向右看,然后向左看 ,  每当遇到圆括号时,就调转阅读方向,当括号内的内容解析完毕,就跳出这个括号  , 重复这个过程直到表达式解析完毕 。
其实我们发现,所谓复杂指针离不开指针函数 , 函数指针,指针数组,函数指针这四个概念并且括号,*比较多,其实只要我们仔细分析这些看起来复杂的表达式 , 其实他的逻辑也是很清晰的 。
使用右左法则解析复杂的表达式:
首先要找到未定义的标识符pfun,当往右看的时候遇到括号,于是调转方向,再朝相反的方向看,
1 pfun遇到了 *,说明pfun是一个指针
2 遇到的是另外一个括号 , 因此说明指针所指向的是一个函数
3 然后又向相反的方向看,又遇到了一个说明该函数的 返回值又是一个指针*
4 说明指针所指向的函数的返回值类型的指针指向的是数组
但是右左法则确实有点麻烦,我们这样看上面这个表达式:首先 fpun是一个指向函数的函数指针 ,该函数有一个整型指针类型的参数并且 返回值也是一个指针  , 所返回的类型指向的是一个数组,并且这个 数组有10个元素,每个 元素是整型指针类型。
首先找到那个未定义的标识符,就是 func
它的外面有一对圆括号,而且左边是一个 号,这说明func是一个指针 *int (int *pInt);
然后跳出这个圆括号,先看右边,也是一个圆括号,这说明(*func)指针指向的是一个函数
这类函数具有int类型的形参  , 返回值类型是 int * 。
func1被一对括号包含,且左边有一个 号,说明func是一个指针 *int (int *p, int (*f)(int *))
跳出括号 , 右边也有个括号,那么func是一个 指向函数的指针

推荐阅读