------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net
培训</a>、期待与您交流! -------
一、函数
函数主要包括函数的定义、函数返回值、函数的调用、函数的声明、函数的参数、.h文件和.c文件的分工等内容。函数使用注意:
1、函数不能重复定义,但是可以重复声明。
2、函数不能存在嵌套定义。
3、在默认的情况下,不允许有函数的名称一样。
4、如果有函数的声明,没有函数的定义,则编译可以通过,因为编译器只会检测语法是否合理,并不会检测函数是否定义,但链接会报错,因为链接的时候会检测函数是否定义。
二、数组
数组主要包括一维数组和二维数组。
使用注意:
1、只能在定义数组的同时进行初始化。
2、如果想在定义数组的同时进行初始化,数组元素个数必须是常量,或者不写。
数组和函数使用注意:
1、数组作为函数参数,可以省略元素个数。
2、数组作为函数参数,传递是整个数组的地址,修改函数形参数组元素的值,会影响到外面的实参数组。
三、字符串
是由很多个字符组合在一起,使用时用(””)将其包含,其内部最后一个字符实际为 ’/0’
strlen函数:计算字符串长度
1、计算的是字符数,并不是字数。一个汉字算作3个字符
2、计算的字符不包括\0
3、从某个地址开始数字符的个数,直到遇到\0为止
四、char类型
字符型,使用时用’’将其标示。char类型数据在内存中储存的是该字符所对应ASCII码表中的数值,占据一个字节。
五、指针
主要为指针变量的定义、指针与数组、指针与字符串、返回指针的函数、指向函数的指针等。
使用注意:
1、int *p只能指向int类型的数据
2、指针变量只能存储地址
3、指针变量未经过初始化,不要拿来间接访问其他存储空间
4、定义变量时的*仅仅是一个象征,没有其他特殊含义
5、不正确的写法*p = &a
6、*p = 20; 这个时候的*的作用:访问指向变量p指向的存储空间指向指针的指针图解
指针和数组:
1、数组元素的访问方式
int ages[5];
int *p;
p = ages;
1>>数组名[下标] ages[i]
2>>指针变量名[下标] p[i]
3>>*(p + i)
2、指针变量+1,地址值究竟加多少,取决于指针的类型
int * 4
char * 1
double * 8
3、利用一个指针来接收一个数组,指针变量array指向了数组的首元素
4、数组名就是数组的地址,也是数组首元素的地址指针和字符串定义字符串的2种方式
六、变量类型
根据变量作用域的不同分为局部变量和全局变量。
局部变量:
1、定义:在函数内部定义的变量,包括形参。
2、作用域:从定义变量的那一行开始,一直到代码块结束。
3、生命周期:从定义变量的那一行开始分配存储空间,代码块结束后,就会被回收。
4、没有固定的初始值。
全局变量:
1、定义:在函数外面定义的变量。
2、作用域:从定义变量的那一行开始,一直到文件结尾。
3、生命周期:程序一启动就会分配存储空间,程序退出时才会被销毁。
4、默认的初始值就是0,根据变量的储存类型分为自动变量、静态变量、寄存器变量。
七、位运算
1、& 按位与:
只有对应的两个二进位均为1时,结果位才为1,否则为0。
2、| 按位或:
只要对应的二个二进位有一个为1时,结果位就为1,否则为0。
3、^ 按位异或:
当对应的二进位相异(不相同)时,结果为1,否则为0。
4、~ 取反:
对整数a的各二进位进行取反,符号位也取反(0变1,1变0)
5、<< 左移:
把整数a的各二进位全部左移n位,高位丢弃,低位补0。左移n位其实就是乘以2的n次方。
6、>> 右移:
把整数a的各二进位全部右移n位,保持符号位不变。右移n位其实就是除以2的n次方。