^异或运算符,先转换为二进制,相同为0,不同为1
0 ^ 1 得 1 1 ^ 1 得 0 0 ^ 0 得 0 1 ^ 0 得 1
转换十进制,A*qn-1(A为数位的数,q为进制,n为第几个数)
十进制转换为q进制(处以q,余数倒过来写)
第一个数是0是二进制;0x开头是八进制;255=1111 1111
Bit字节二进制的每个位1Byte=8bit(8位二进制=一个字节)
C被称为中级语言
代码写在返回值return前面
“/”是转义字符
#include //数学公式
Ex开头错误1中文2括号
y++先使用再自增,++y先自增再使用
#define pi 3.141592657 没有“=”和“;”
%a.bf对于浮点数,a是整体缩进.占一位大于不起作用一般省略,b是小数个数,丢失高精度向低精度转换数据丢失
A+25是65,a+25是97,0是48
Scanf里面不能写输入“”以外的东西,要&
printf(“%c”,A+32);字母转换没’’
64位系统Int4个字节每个字节八位=32(系统位/16)位,范围:-2^32(4*8)~2^32-1,
Char1flaot4double8(个)字节,(二进制位)长度*8,long*2
64位系统int4字节,32位int2
字符常量用‘’,字符串常量用“”
取余%前后只能接整型,后面不能接0
‘\r’回车\n换行\t横向跳格\b退格\F走纸换页\\反斜杆\’单引号\”双引号\ddd1~3位八进制所代表的字符\xhh1~2位十六进制所代表的字符
Sizeof()查看所占字节数长度,为长整形%ld,自己转换类型
赋值:给予变量一个确定的值
强制转换要加括号
a[10]是0~9
S+=4+a
i++先使用再+1
回车按键也是字符,连续输入字符的时候要注意幻影回车符等加多个字符
Scanf要&,“”写什么就输入什么
¾整形取整,3.0/4.0浮点型有小数其中一个有小数就行
条件类型bool只有0不执行和非0执行
BOLL不能用浮点型(判断),浮点数是个不定值,数值会浮动
Bool要引用包括#define T/F 0/1
字符可以通过ASII码转换为整型
字符比较大小不要‘’跟数字一样
三目运输符a?b:c.a为非0则b,a为0则c
随机函数n=rand()%(Y-X+1)+X为X~Y的随机
自定义函数:定义intmax(inta,intb){ }声明int,max(inta,intb)调用c=max(a,b),调用内外不能int其余内外都要int
结构体定义structstu{inta;intb}(赋值boy1={“”,“”},boy2;或定义stu1)
While(){};。do{}while();里条件都不能定义条件要STATIC
宏#defines12*2与#defines2(2*2)不同a/2*2与a/(2*2)没有=没有;
Break跳出一个循环,但会执行语句。continue跳出本次循环,不执行本次接下来的语句,进入下一次循环。除swhitch没循环不能用
Continue和break可以用在循环语句和switch语句中,swtich不是循环语句
润年1.能被400整除2.能被4整除不能被100整除(每一百年少一个闰年)
函数:将具有独立功能的代码封装在一起,使它们有机的结合,能够实现特定的功能并且可以重复利用的代码集合,作用:把相对独立的某个功能提取出来,使之成为程序的一个独立实体,在同一个程序或其他程序中多次重复使用何时使用函数:
形参是实参的接口
变量、函数命名:字母+数字+下划线,不能是数字开头
函数类型是返回值类型,有返回值写返回值类型,有返回值必须写返回值类型
Charstr[8]0~7有八个字符,长度+1(’\0’结束标志长度)
C中数据越界,越界的为0;但是OC中会崩溃
求数组个数sizeof(a)/sizeof(int),数组a为整形,sizeof()为长整形
多维数组有大括号的,大括号里没大括号的数的数量要写清楚,系统不知道要补几个0
%s打印字符串数组,手动写’\0’或多加空间(系统帮你写’\0’),否则出错一般以倒着的问号结束
Chara[7]=“iphone”或{‘I’,’p’,’h’,’o’,’n’,’e’}多加空间
数组名表示首元素地址
结构体后要;,用.和->调用,结构体一般在main函数前定义,这时赋值加空格名
枚举enumweekday{mon,tue,wed,thu,fri=10,sat,sun}a,b;enumweekdayc=mon;
1.必须是int类型2.第一个默认0并且有序,有数的开始往后+1,3.常量4.逗号隔开5.一般选名字,选值时默认相同值的第一个
structperson p={"BoKan",19,"guangzhou"};
Inta(inta)//a为数组,数组不用写下标
字符串1.gets(a),puts(b)2.字符串拼接strcat(a,b)(拼接的要足够大)3.差值strcmp(a,b)4.strcpy(a,c)c给a
Float默认六个小数
连续输入
结构体:每次拿四个字节空间,每个元素不是四的倍数补齐,补齐的占而不用/某些对齐最长补齐最长
指针:1.*取地址的数据2.定义有*使用不用*3.指针后面只能放地址,指针名指向地址名inta=0,
int*p;p=&a间接取值;或*p=a;int*q=&a;直接取值
p是箭头指向的内存地址,*p是箭头指向的内存地址的内容,&p是p的内存地址,a是内容,&a是a的内存地址,除指针p外,&是取地址%p,*是取地址的值
编译时电脑把a[i]转换为*(a+i)处理,数组名a代表数组首元素地址,p+n指针向后偏移(移动单位),a+n是值a[n]的地址
指针数组是被指针指向的数组,数组指针是指向数组的指针,*与&一起用,*s指针类型8个字节,int*p=&a
Printf(“%s,%p”,p,p)不能是%c;*只能p=“iph\0nde”(定点结束)
不能*p={‘I’,’p’}
*p多用于指向字符串数组的指针,*p为指向字符串,要是数组就必须用二维数组,因为字符串是一个数组
重命名typedef前面给后面只能定义数据类型typedefinta;a的作用与int一样如:intb等同于ab;Static只能初始化一次就是类型不能变;#define用于定义变量后面给前面如:#definemax(a,b)(a>b)?a:b;constint*pi=3.14可以修饰指针常量int*constp=&a指针不能改变指向,
constint*p=&a,intconst*p=&a常量指针指向的内容不能变
数组中的指针voidbian(int*p,int*q);引用要&,bian(&a[i],&a[4-i]);
结构体指针:typedefstructpointapoint; apointa={97,65,48};structpoint *p=&a; printf("%d,%d,%d\n",p->age,a.id,(*p).ui);
p2=malloc(4);指针没指向才要,要是太小会补齐而且释放不了Free(p2);scanf("%d",p2);p2是地址不用&
指针的指针的指针*b=&a;**c=&b,***d=&c
函数指针int(*fun)(intx,inty)返回值类型(*指针名)(参数列表);fun=max;指针名=函数名;(*p)(x,y);
listhead=(list)malloc(sizeof(list));第一个list是类型;(类型)*p=(类型sizeof(类型))
#typedefchar* p1;#definep2char*;P1s1,s2;
p2s3,s4=char*s3,s4;
把函数名变成指针名(*)
指针*与&一起用,int*p=&a,int是a的类型,*才是指针类型占8字节
指针常量,指向不能变;常量指针,指向常量的指针,内容不能变
共同体共用一个内存
数据储存结构:线性结构(链状)和非线性结构(离散形)(树形)
链表:逻辑连续,节点=元素=指针+数据,头节点数据为空null,头节点的指针指向首节点,首节点是第一个有效数据的开始,尾节点有数据没指针,指针类型为节点类型(节点结构体类型)
单链表:数据+指针,data+next
双链表:前驱+数据+后继,before+data+next
树形结构::前驱+数据+后继,before+data+next1+next2+nextn
网状结构:前驱+数据+后继,beforen+data+nextn
结构体调用“.”,结构体指针调用->
structNode {intdata;structNode*Next;};
structNode*h=head;head->data取数据域上的数据;head->next取指针域上的指针;
插Node4:Node4->next=Node2;Node1->next=Node4;
删除Node2:Node1->next=Node3;release Node2
单链表:逻辑连续
双链表
栈:LIFO(Last In First Out)后进先出
队列:在一端插入,在另一端删除FIFO
‘.h’是定义interface接口,’.m’是主函数implementation实现
定义在“.h”的@end前加{}写在里面
函数写在-(void)viewDidLoad的}前