printf()函数
成功返回值是printf实际控制输出的字符数
失败返回值是负值
全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。
局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。
静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。
从分配内存空间看:
全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间。从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的。
%d 有符号10进制整数;
%i 有符号10进制整数;
%F/f 浮点数;
%E/e 用科学表示格式的浮点数;
%g 表示指数形式或定点十进制形式的浮点数,形式的选择根据数的大小决定;
%c 单个字符;
%s 字符串;
%o 无符号8进制整数;
%u 无符号10进制整数;
%x 无符号的16进制数字,并以小写abcdef表示;
%X 无符号的16进制数字,并以大写ABCDEF表示;
%-3d ——以10进制显示,3表示输出的数字占3个字符的位置,-表示左对齐;
%3d——以10进制显示,3表示输出的数字占3个字符的位置,+或者不写表示右对齐;
%0nd——以10进制显示,表示输出数字不足占用n个字符位置时,左补齐0。
%5.3d——以10进制显示,至少占用5个字符空间,并至少有3位数字(不足补0),右对齐。
%10.3f——以定点十进制形式显示,至少占用10个字符空间(小数点也算占用一个字符空间),小数点后保留三位,右对齐。如:···456.123(这里用·表示空格)
%10.3e——以指数形式显示,至少占用10个字符空间,小数点后保留三位,右对齐。如:456.123表示为·4.561e+02
%5.3s——以字符串显示,至少占用5个字符空间,打印3位字符(字符足够,打印前3个;不足空缺),右对齐
引用:(27条消息) 详解转换说明%-3d、%3d、%nd、%*2d、%0nd、%0.1f、%5.1f、%*d等含义_雨_木的博客-CSDN博客
数组是类型相同,数量固定,有限个变量的集合。
存储特点为有序数据,为其分配连续的存储空间。
数组名是一个地址常量,存放数组内存空间的首地址。
二维数组存储方式,按行存放,每行按列存放。
字符数组:
char hello[5] = {'H','e','l','l','o'};
字符串:
char hello[6] = "Hello";
易混淆定义:将字符串存入一维字符数组时,由于它有一个结束符 '\0',数组长度至少是字符串的有效长度+1。例如,字符串"Happy"的有效长度是5,存储它的数组的长度至少应为6。
C语言规定当使用双引号定义字符串时,以'\0'作为这个字符串的结束标志符,也就是说这个字符串一共有6个字符,分别是'H'、'e'、'l'、'l'、'o'、'\0'。
所以当使用双引号定义字符串时,数组大小一定要 +1 ,以免出现预期之外的错误
参考:
指针就是地址
结构体可以包含自己指针
形参:在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数。
实参:函数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数。
形参和实参的功能是传递数据,发生函数调用时,实参的值会传递给形参。形参和实参的区别和联系
1) 形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。
2) 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。
3) 实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。当然,如果能够进行自动类型转换,或者进行了强制类型转换,那么实参类型也可以不同于形参类型。
4) 函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向地传递给实参;换句话说,一旦完成数据的传递,实参和形参就再也没有瓜葛了,所以,在函数调用过程中,形参的值发生改变并不会影响实参。
引用: