变量的存储类别
(变量值存储时间)动态存储方式,在程序运行期间进行分动态的分配存储空间的方式,静态存储方式是指在程序运行期间分配固定的存储空间的方式;存储空间分为程序区、静态存储区和动态存储区;全局变量全部放在静态存储区中,程序开始时分配空间,完毕时释放;动态存储区中存放以下数据:
1、函数形式参数;
2、自动变量;
3、函数调用时的现场保护和返回地址;
在C语言中每个变量和函数都有两个属性,是数据类型和数据存储类型,存储类别是数据在内存中存储的方式。
存储方式分为静态和动态存储类,具体包含有四种:
自动的(auto);
静态的(static);
寄存器的(register);
外部的(extern),
如果不加以声明,就自认为是auto型就会自动分配存储空间属于动态存储方式。
数组作为函数参数
数组可以由整个数组当作函数的参数,也可以由数组中的某个元素当作函数的参数:
整个数组当作函数参数,即把数组名称传入函数中
数组作为函数参数时注意以下事项:
数组名作为函数实参传递时,函数定义处作为接收参数的数组类型形参既可以指定长度也可以不指定长度。
数组元素作为函数实参传递时,数组元素类型必须与形参数据类型一致。
static声明局部变量
是在函数调用结束后不消失而保留原值,即占用存储单元不释放,在下一次调用该函数时,该变量已有值,就是上次函数调用结束时的值。其中需要说明的是在定义局部变量不赋初值的话,则静态局部变量编译时自动赋值为0或者空字符,虽然静态局部变量在函数调用结束后仍然存在,但是其他函数不能引用它的。静态局部变量主要用在当初始化后,变量只是被引用而不改变其值。
字符串与数组
C语言中,是没有办法直接定义字符串数据类型的,但是我们可以使用数组来定义我们所要的字符串。一般有以下两种格式:
char 字符串名称[长度] = “字符串值”;
char 字符串名称[长度] = {‘字符1’,‘字符2’,…,‘字符n’,’\0’};
注意:
[]中的长度是可以省略不写的;
采用第2种方式的时候最后一个元素必须是’\0’,’\0’表示字符串的结束标志;
采用第2种方式的时候在数组中不能写中文。
在输出字符串的时候要使用:printf(“%s”,字符数组名字);或者puts(字符数组名字);。
register变量
是C语言中允许将局部变量的值放在CPU中的寄存器中需要时直接从寄存器中取出来参加运算,不必再到内存中提取,但是计算机系统中寄存器数量有限,不能任意定义任意多的存储器,局部静态变量不能定义为寄存器变量。
mtianyan:字符串函数
常用的字符串函数如下(strlen,strcmp,strcpy,strcat,atoi):
![](https://img-blog.csdnimg.cn/img_convert/1f9cb6c55632bf52259c7955c7c44712.jpeg)
使用字符串函数注意以下事项:
strlen()获取字符串的长度,在字符串长度中是不包括‘\0’而且汉字和字母的长度是不一样的
strcmp()在比较的时候会把字符串先转换成ASCII码再进行比较,返回的结果为0表示s1和s2的ASCII码相等,返回结果为1表示s1比s2的ASCII码大,返回结果为-1表示s1比s2的ASCII码小
strcpy()拷贝之后会覆盖原来字符串且不能对字符串常量进行拷贝
strcat在使用时s1与s2指的内存空间不能重叠,且s1要有足够的空间来容纳要复制的字符串