C语言的数据类型
![](https://i-blog.csdnimg.cn/blog_migrate/0731075eeff03a7862aaad46b17c465f.png)
C语言中的基本输入和输出
putchar和getchar函数只会输入输出一个字符。
使用gets函数时,在gets中传入一个字符指针,也就是存放这个字符串的字符数组地址即可接收。
可将想要输出的字符串或者字符数组的地址传入puts即可打印输出。
C语言运算符和表达式
sizeof是C语言的32个关键字之一,并非“函数”。
其运算对象可以是任何数据类型或变量。
逻辑运算符和其它运算符优先级从低到高依次为:
赋值运算符(=)<&&和||< 关系运算符 < 算术运算符 < 非(!)
C语言递归
必须满足的条件:
存在限制条件,当达到这个限制条件时,递归停止。
每次递归结束之后越来越接近这个限制条件。
C语句和程序流
if选择结构
三种形式
单选择
if(表达式)
{
}
双选择
if(表达式)
{}
else
{}
多选择
if(表达式)
{}
else if(表达式)
{}
else if (表达式)
{}
else{}
C语言switch case语句
先计算switch后的表达式,在使其与case后的表达式比较,若相等,则从这个表达式后面的语句开始执行,若没有一个与switch后的表达式相等,则执行default后的语句
switch(表达式) /*首先计算表达式的值*/
{
case 常量表达式1:语句1;
case 常量表达式2:语句2;
case 常量表达式3:语句3;
// ……
case 常量表达式n:语句n;
default:语句n+1;
}
C语言break语句
break,顾名思义,跳出的意思,仅用于跳出switch结构或循环结构,用于提前结束switch结构或循环。(用于循环和switch语句中)
C语言continue语句
continue,顾名思义,是继续的意思,它仅用于循环中,用于提前结束本次循环,即跨过continue后面的循环语句,提前进入下次循环。(仅仅用于循环中)
C语言三种循环结构
whlie循环
while语句创建一个循环,该循环在判断表达式为假(或0)之前重复执行。while语句是一个入口条件(entry-condition)循环,在进行一次循环之前决定是否要执行循环。因此有可能一次也不执行。循环的语句部分可以是一个简单语句或一个复合语句。
while(表达式)
{
循环体语句
}
do while循环
do while语句创建一个循环,它在判断表达式为假(或0)之前重复执行。do while语句是一个退出条件循环,在执行一次循环之后才决定是否要再次执行循环,因此循环至少要被执行一次。循环的语句部分可以是一个简单语句或一个复合语句。
do
{
循环体语句
}while(表达式);
for循环
for语句使用由分号隔开的三个控制表达式来控制循环过程。for语句是一个入口条件循环,在进行一次循环之前决定是否要执行循环,因此有可能循环一次也不执行。循环的语句部分可以是一个简单语句或一个复合语句。
for(初始化表达式;判断表达式;更新表达式)
{
循环体语句
}
循环的嵌套:
外部循环执行一次,内部循环执行一轮。
C语言函数
函数的定义
返回值类型 函数名(形参表说明) /*函数首部*/
{
说明语句 /*函数体*/
执行语句
}
函数的调用
(1)函数表达式:函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数是有返回值的。
(2)函数语句:函数调用的一般形式加上分号即构成函数语句。
例如:
printf("%d",a);
scanf("%d",&b);
(3)函数实参:函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送,因此要求该函数必须是有返回值的。
例如:
printf("%d",max(x,y));/*把max调用的返回值作为printf函数的实参*/
函数的声明
类型说明符 被调函数名(类型 形参,类型 形参...);
在程序中,函数的定义只能有一次,而函数的声明可以有多次。
C语言变量的存储类型
在计算机中保留变量当前值的存储单元有两大类,内存和cpu的寄存器
生存期(时间角度)
变量的保留时间又叫做变量的生存期
可将变量分为静态存储和动态存储两种情况:
(1)静态存储是指变量存储在内存的静态存储区,在编译时就分配了存储空间,在整个程序的运行期间,该变量占有固定的存储单元,程序结束后,这部分空间才释放,变量的值在整个程序中始终存在。
(2)动态存储是指变量存储在内存的动态存储区,在程序的运行过程中,只有当变量所在的函数被调用时,编译系统才临时为该变量分配一段内存单元,函数调用结束,该变量空间释放,变量的值只在函数调用期存在。
作用域(空间角度)
从空间角度,可以将变量分为全局变量和局部变量:
(1)局部变量是在一个函数或复合语句内定义的变量,它仅在函数或复合语句内有效,编译时,编译系统不为局部变量分配内存单元,而是在程序运行过程中,当局部变量所在的函数被调用时,编译系统根据需要,临时分配内存,调用结束,空间释放。
(2)全局变量是在函数之外定义的变量,其作用范围为从定义处开始到本文件结束,编译时,编译系统为其分配固定的内存单元,在程序运行的自始至终都占用固定单元。
四种类型的变量
auto自动变量
动态存储,全局或局部变量
函数中的局部变量,如不专门声明为static存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。
自动变量用关键字auto进行存储类别的声明,
extern外部变量
静态存储,全局变量
引用之前用关键字extern对该变量进行“外部变量声明”
static静态变量
静态存储,全局或局部变量(看自己定义)
C语言寄存器变量
为提高效率,C语言允许将局部变量的值存放在CPU的寄存器中,这种变量叫做寄存器变量,用关键字register声明。使用寄存器变量需要注意以下几点:
(1)只有局部自动变量和形式参数可以作为寄存器变量。
(2)一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量。
(3)不能使用取地址运算符“&”求寄存器变量的地址。
C语言数组
一维数组
int a[];
数据类型 数组名 [常量表达式];
当给部分元素负值时
数据类型为整型,未赋值的记为0;
数据类型为浮点型时,未赋值的记为小数类型;字符类型则为'\n'
二维数组
定义及初始化
int a[3][4]={{1,2,3,4},{10,20,30,40},{100,200,300,400}}; //定义一个三行四列的二维数组,按行赋值
int a[3][4]={1,2,3,4,10,20,30,40,100,200,300,400}; //定义一个三行四列的二维数组并对其中的12(3*4)个元素进行赋值
字符数组
定义及初始化
char c[6]={'c', ' h ', 'i', 'n', 'a' , '\0' };
char a[]={"china"};
其中,‘\0’为字符串结束符。如果不对c[5]赋任何值,‘\0’会由系统自动添加。
C语言指针
C语言的定义
这里的*与前面的类型说明符共同说明这是一个指针变量,类型说明符表示该指针变量所指向的变量为何种数据类型,变量名即为定义的指针变量名。除此之外,C还提供*运算符获取地址上对应的值
C语言与数组的联系
C语言规定,数组名代表数组的首地址,也就是第0号元素的地址。因此
p=a; /*等价于p=&a[0];*/
int *p=a; /*等价于int *p=&a[0];*/
1.对于指向首地址的指针p,p+i(或a+i)就是数组元素a[i]的地址,*(p+i)( 或*(a+i) )就是a[i]的值。
如果指针变量p已指向数组中的某一个元素,则p+1指向同一数组中的下一个元素。
2.引入指针变量后,就可以用以下两种方法来访问数组元素:
(1)下标法,即用a[i]形式访问数组元素,在前面介绍数组时都是采用这种方法。
(2)指针法,即采用*(a+i)或*(p+i)形式,用间接访问的方法来访问数组元素,其中a是数组名,p是指向数组的指针变量,其初值p=a。
C语言字符串与指针的用法
1,字符指针也可以指向一个字符串,可以用字符串常量对字符指针进行初始化,例如:
char *str = "I love you" ;
此时,字符指针指向一个字符串常量的首地址。
2.还可以用字符数组来存放字符串,例如:
char string[ ] = "I love you";
两者区别:字符指针str是个变量,可以改变str使它指向不同的字符串,但不能改变str所指向的字符串常量的值。而string是一个数组,可以改变数组中保存的内容。应注意字符串指针和字符串数组的区别。