------------------------------------------------语句结构---------------------------------------------------------------------
if语句:if.....[else if,...][else]
switch语句:switch(表达式){
case常量表达式1:语句组;[break;]
case常量表达式1:语句组;[break;]
case常量表达式1:语句组;[break;]
case常量表达式1:语句组;[break;]
case常量表达式1:语句组;[break;]
[default:语句组;][breake;]
}
表达式的类型为整型或者字符型。case后面为常量表达式(包含整型常量表达式,字符常量表达式)。
while循环:条件成立,进入循环体;
do.....while循环:首次进入循环体,若条件成立,进入循环体;
for循环:表达式for(初始变量;判断条件;循环变量修改)
缺省判断条件时,默认循环成立,当循环体无结束循环操作的语句,程序将陷入死循环
break;:终止循环。
continue;:结束本次循环体中的操作。
--------------------------------------------------------------数组-------------------------------------------------------------
数组:是数据类型相同的一类数据的集合。
一维数组:
声明(定义)方式:数据类型 数组名[数组长度],例如:int arr[size],其中的size在C89标准中必须为整型常量表达式
在C99中引入了变长数组,size可以为变量
C11将变长数组从标准中移除,当做可选。
初始化列表的项数应该与数组的大小一致,当未初始化时,数组存储的是垃圾值;数值类型的数组如若初始化了部分数据,则未被用户初始化的数据将自动初始化为0。
如果初始化数组时省略方括号中的数字,编译器会根据初始化中的项数来确定数组的大小。
不允许将数组作为一个单元给另外一个单元进行赋值。
二维数组:
声明(定义)方式:数据类型 数组名[数组下标1][数组下标2],其中数组下标1可缺省,编译器会根据初始化的数据,自动判断数组下标1的大小。
字符数组:char 数组名[size]
当初始化部分数据时,未被初始化的数据为\0;
初始化方式 char str[] = {'h','e','l','l','o'};
或者 char str[] = {"hello"};
或者 char str[] = "hello";
scanf()输入字符数组:scanf("%s %s %s",arr1,arr2,arr3);
空格、制表符、回车都会作为输入数据的分隔符,
切忌scanf("%s,%s",arr1,arr2);这种方式,只会初始化arr1,会导致arr2里面的未被初始化。
printf()输出字符数组:输出的字符不会包括\0,只会输出第一个\0前面的字符。
gets():函数原型 char *gets(char *string);
从键盘输入字符串(可以包含空格),按回车键结束输入。
puts():将字符数组中存放的字符串输出,遇到第一个\0时停止输出,并自动换行。
数组与指针:数组名是数组首元素的地址,假设arr是一个数组,则 arr==&arr[0] 是成立的。
指针是一个值为内存地址的变量(或数据对象)。
间接(或称解引用运算符):*,取出内存地址所对应的值,优先级大于算数运算符,右结合性。
声明指针:数据类型 * 指针名称,如int * pr;
指针加1:递增它所指类型的大小(以字节为单位)。通常int类型占用4个字节,int *类型的指针加1即增加4个字节。
指针减法与指针减法同理。
在函数定原型和函数定义头中,若要添加指针形参可使用int * arr 和 int arr[]两种形式,但是int arr[]的写法仅仅用于声明形式参数,同时
int arr[]有两层含义,第一层含义就是arr是一个指向int类型的地址,同时arr也是一个int类型数组中的元素。
仅当arr是一个指针变量时才能使用++和--,作为数组名时是不能使用的。
重要点:使用指针之前一定要进行初始化,否则指向的位置不确定,可能造成严重的错误。
const修饰符:创建指向const的指针、创建const数组、创建const指针
①int arr[5] = {1,2,3,4,5};
const int * pr = arr; //pr被称为指向const的指针
表示不能通过pr对arr数组中元素的值进行修改。
②指向const的指针可被初始化为const的数据或者非const的数据
③非指向const的指针(普通指针)只能被初始化为非const的数据,
因为把const的数据赋值给普通指针时,那么将可以通过指针修改const数据了,因此C语言规定不允许这种操作
④const int arr[5] = {1,2,3,4,5}; //创建了一个const的数组
⑤int * const pr = arr; //创建了一个const的指针,表示pr除初始化可被赋值,之后不能进行改变。
复合字面量:C99标准新添加,int arr[2] = {1,2}等价于(int [2]){1,2},数组和复合字面量均可省略大小。