1.变量的命名规则以及规范(4规则\2规范)
4规则:
1>标识符只能由数字\字母\下划线\$组成而且不能以数字开头
2>变量严格区分大小写
3>不能和关键字重名
4>同一作用域内不能定义相同名字的变量
"5>变量一定要在声明后使用"
2规范:
1>标识符的定义必须有意义(例:年龄-->age)
2>驼峰式命名法:如果一个变量名由多个单词组成,那么除了第一个单词,其他单词的首字母大写.
补充:变量命名一定要符合规则和规范\ 写代码一定要加注释(注释不参与编译) 方便他人阅读 \ 代码要整齐
拓展:OC中成员变量名必须要以下划线开头
#pragma mark - 2.数据类型转换
2.数据类型转换
1\数据类型转换分为二种:隐式转换(自动转换)\显示转换(强制转换)
2\隐式转换(自动转换):当赋值符号"="左右两边的数据类型不一样的时候 系统会进行自动的转换(会把右边的值的类型转换成左边的类型)
举例:int num = 3.9; double类型3.9赋值给num的时候会直接忽略小数点,转成整型,但精度降低;
隐式转换中自己要明确,右边的数值到底能不能转成左边的类型.
char类型的隐士转换: 字符在内存中是以ASCII码存在的,本质上是个数字,是一个整数
3\显示转换(强制转换):在变量前加上小括号(小括号中填上要强转的类型)
举例:应用比较多的是结构体先定义再一起初始化的时候,可以在大括号前加上小括号填上要强转的结构体类型.
拓展:
OC:oc中当一个父类指针指向子类对象的时候,又想通过父类指针去访问子类对象的私有方法和属性时,可以将这个父类指针强转为子类类型
#pragma mark - 3.printf\scanf, 自增自减,逻辑运算符
3.printf\scanf, 自增自减,逻辑运算符
1\printf\scanf
1>printf:c语言中格式化输出字符串的函数,可以输出自定义字符串\常量\变量(不自动换行)
补充:puts():输出字符串---原理:从给定的地址开始到'\0'结束--- 优点:自动换行 ---缺点:不能格式化输出.
fputs():将数据输出到指定的流中(包括标准输出流和文件流)
拓展:OC中用"NSLog(@"");"来格式化输出自定义字符串\变量\常量\对象,优点:自动换行
2>scanf:scanf函数是从控制台接收用户输入的数据的函数,可以接收字符串\和基本数据类型
注意:如果有多个占位符,占位符间隔可以自定义,但控制台输入的时候要对应.
也可以不写,不写的情况下如果是基本数据类型(除了字符型),那么输入每个数据的间隔可以是空格\回车\table键
如果是接收的字符类型,要在接收之前清空缓存区,因为回车也算是个字符,scanf是从缓冲区拿数据的."rewind(stdin);"
缺点:接收字符串的时候不能接收空格\接收字符串的长度超过数组长度会报错
补充:gets()控制台获取输入的字符串 ----优点:输入的时候中间可以有空格----- 缺点:不安全(输入长度大于数组长度崩溃)
fgets()从流中接收数据(标准输入流和文件流):-----优点:可以接收空格,----接收长度大于数组长度不会报错,只会接收数组长度减1的长度并自动加上'\0',---接收长度小于数组长度减1的时候,会自动在末尾加上'\n', 安全 ,可以从文件流中读取数据
2\自增自减
1>不管++在前还是++在后,操作运算符的这个变量最后都会改变
2>++在前是先将这个变量加1再使用这个值,++在后是先使用这个变量的值然后再+1;
--同理
自增自减运算符在循环中用的较多
3\逻辑运算符(三种)
1>逻辑与(&&):全真为真,当运算符两边都为真时,表达式的值才为真,有短路现象,当运算符左边为假时,运算符右边的表达式不会执行,整个表达式为假
2>逻辑或(||):有真则真,当运算符两边有一个是真的时候,表达式的值就为真, 有短路现象,当运算符左边为真时,运算符右边的表达式不会执行,整个表达式为真.
3>逻辑非(!)(取反):单目运算符,假变真,真变假.
补充(按位运算):
按位与(&):二进制对应位都为1时,对应位结果才为1(应用:数值&1,可以取出当前位)
按位或(|):二进制对应位有一个为1,则对应位结果就为1
按位取反(~):0变1,1变0
按位异或(^):相同为0,不同为1.
按位左移(<<):高位舍弃,低位补0 移动n位相当于乘上2的n次方
按位右移(>>):低位溢出舍弃,高位补符号位,移动n位相当于除上2的n次方
将其他进制数转换成二进制数输出
#pragma mark - 4.if 语句,三元表达式,switch-case, break 与 continue 区别
4.if 语句,三元表达式,switch-case, break 与 continue 区别
1\if语句 :选择结构 :先判断第一个条件表达式,不成立再判断第二个...前面的都不成立,会执行else代码块
补充:if用的很多
2\三元表达式: 相当于最简单的if else 结构 格式:条件表达式?表达式1:表达式2; 条件表达式成立执行表达式1,不成立执行表达式2.
3\switch-case:选择结构:
1>switch后面小括号中只能是结果为整数的表达式\变量\或者'字符',,
2>case 不能是变量,只能是结果为整数的表达式\或者'字符'
3>case后面的值不能相同
case有穿透现象,如果case里没有break,那么如果一个case中的值相等,会执行之后的所有case中的语句,不会判断.
补充:当判断的是整数或字符的时候用switch较合适(判断枚举的时候用的较多)
4\ break 与 continue 区别
break: 只能用在循环语句和switch中, 在循环中break是立即终止该循环,在switch中是终止switch语句.
continue: 只能用在循环语句中,在循环语句中,continue只是中断本次循环继续下次循环."用于加速循环"
#pragma mark - 5.while与do-while区别,while 与 for循环区别
5.while与do-while区别, while 与 for循环区别
1\while与do-while区别:都是循环结构
while:当型循环:先判断再执行. 在第一次判断条件不成立的情况,不会执行.
do-while:直到型循环:先执行后判断 .在第一次判断条件不成立的情况下也会执行一次.
应用:在循环体无论如何都要执行一次的时候,使用do-while,,在实际开发中do-while使用较少.
2\while 与 for循环区别
for循环比while循环更简洁,while可以实现的循环,一定可以用for循环来实现,反之亦然.
for循环做嵌套比while循环可读性更高.
补充:死循环用在游戏,系统比较多.
拓展:OC加强for循环
#pragma mark - 6.四种进制,sizeof运算符,位运算,int类型的修饰符,有符号和无符号
6.四种进制,sizeof运算符,位运算,int类型的修饰符,有符号和无符号
1\四种进制:二进制(0b开头>>0-1)-----八进制(0开头>>0-7)----------十进制(0-9)-------十六进制(0x开头>>0-f)
2\sizeof运算符:计算当前系统,编译器下, 常量,变量,数据类型在内存中所占的字节数
注意:
sizeof(字符型变量):1个字节
sizeof(字符型常量):4个字节
3\位运算
按位与(&):二进制对应位都为1时,对应位结果才为1(应用:数值与上1,可以取出当前位)
按位或(|):二进制对应位有一个为1,则对应位结果就为1
按位取反(~):0变1,1变0
按位异或(^):相同为0,不同为1.
按位左移(<<):高位舍弃,低位补0 移动n位相当于乘上2的n次方
按位右移(>>):低位溢出舍弃,高位补符号位,移动n位相当于除上2的n次方
将其他进制数转换成二进制数输出
4\int类型的修饰符:
三个,short修饰, long修饰, long long修饰 :指定int类型的变量在内存中占用的字节数.
有符号无符号修饰符:signed unsigned(无符号二进制中最高位不表示正负,而是直接参与数据的表示)
#pragma mark - 7.格式控制符,垃圾值,选择,冒泡,常用函数
7.格式控制符,垃圾值,选择,冒泡,常用函数
1\格式控制符
int类型格式控制符:以十进制形式输出:%d, 八进制输出:%o, 十六进制输出:%x.
int被修饰符修饰后的格式控制符: short %hd
long %ld
long long %lld
unsigned int %u
unsigned short %hu
unsigned long %lu *********
unsigned long long %llu
float: %f 如果想保留几位小数 %.mf m表示保留的小数位数
double %lf 如果想保留几位小数 %.mlf m表示保留的小数位数
char: %c 注意:用%d输出的是ASCII码值
打印地址: %p
字符串:%s
拓展:OC中打印对象%@调用description方法,OC字符串是个对象,在打印字符串某个字符时,是打印unichar(unsigned short) 用%C打印
2\垃圾值
定义局部变量未初始化,存储的是垃圾值 (全局变量默认初始化为0)
声明一个数组未初始化,则每个元素都是一个垃圾值
声明指针未初始化则指针是个野指针,指向未知地址,定义指针的时候当不知道初始化值的时候,赋值NULL
拓展:OC创建对象的时候,系统自动初始化成员变量(属性)
3\选择排序(应用:)
for(int i= 0; i<len-1; i++)
{
for(int j = i+1; j<len; j++)
{
if(arr[i] < arr[j])
{
交换
}
}
}
4\冒泡排序(应用:)
for(int i = 0; i<len-1; i++)
{
for(int j = 0; j<len-1-i; j++)
{
if(arr[j] > arr[j+1])
{
交换
}
}
}
5\常用函数
1>stdio.h中:
格式化输出:"printf();"
格式化输入:"scanf();"
字符串输出:"puts();"
流输出 :"fputs();"
字符串输入:"gets();"
流输入 :"fgets();"
打开文件:"fopen("文件路径", 打开模式);"
关闭文件:"fclose(文件指针);"
写入文件:"fwrite();"
读取文件:"fread();"
2>stdlib.h中
随机数:"arc4random_uniform();"
malloc(字节数):向堆区申请空间
calloc(块数,每一个块字节数):向堆区申请指定字节数的空间,优点会将申请的空间数据清零.
realloc(原来字节空间的指针,扩容后的容量):空间不够用,可以进行扩容.
free(指针):释放申请的空间
3>string.h中
计算字符串长度:"strlen();"
比较字符串:"strcmp();"
拷贝字符串:"strcpy();"
链接字符串:"strcat();"
#pragma mark - 8.指针的存储,指针是什么?指针类型,指针类型,指针运算,const关键字
|
|