C笔记

^异或运算符,先转换为二进制,相同为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的}前

你可能感兴趣的:(C笔记)