100b100100x10
int a[10];int*p=a;//单独的数组名a相当于第一个元素的地址,即&a[0]//数组名是数组的首元素地址。指针变量加1,其结果相当于加1个其指向的字节数。例:int*p=(int*)5;p++;p==9char*q=(char*)5q++;q==6
指针是一个变量 64位系统环境下,所有指针都是8字节#include<stdio.h>int main(void) }
int a[20]//一次性声明了20个int型变量 //称a为20个元素了数组, // 是a[0]……a[19];a[0]a[1](a[0+1])下标不一定是一个数字,也可以是表达式数组是相同类型变量了集合
循环语句for(语句1;表达式;语句3;){ 语句2 }//先执行语句1,计算表达式(真)语句2,语句3,计算表达式(真)语句2,语句3,表达式(语句1只在循环第一次执行,就不再执行)表达式假跳出循环
循环语句while(表达式){语句;}//表达式的值为真,执行语句,再计算表达式,为真,继续执行语句,再计算表达式……,循环返覆,直到表达式的值为假,跳出while语句。break只会跳出循环和switchcontinue//跳回表达式计算do {语句;//先执行语句}while(表达式);
goto 跳转语句#include<stdio.h>{printf("1\n");goto ABC;//改变程序人运行顺序,跳转到标号的位置继续执行printf("13\n")ABC://标号(标号什么都不做)printf("14\n")return 0;}switch跳转语句(逻辑选择)switch(表达式){//表达式的值为几,就跳到case几继续往下执行case 1:语句1;case 2:语句2;case 3:语句3;}若在里面加:default://若表达式的值上面都没有,就执行default语句然后往下执行 break;(switch语句若有break就会跳出switch语句,然后往下执行)
关系运算符低于算术运算符关系运算符成立,表达式的值为真(非0的值)关系运算符不成立,表达式的值为假(值为0)>(大于)<(小于)==(等于)(单等于=为赋值运算符)>=(大于等于)<=(小于等于)!=(不等于) 逻辑运算符优先级低于关系运算符*(非例外)逻辑运算符逻辑与&&左右两个表达式为真,与表达式为真逻辑或||左右两个表达式为有一个真,与表达式为真 逻辑非!(优先级高)该符号跟随的表达式为假,表达式值为真逗号运算符(优先级很低)从左到右计算表达式逗号运算符总表达式的值为逗号是最后的一个表达式的值?:运算符int ret 3>2?4:5?前面表达式成立总表达式的值 :前面的表达式的值,不成立为 :后面的。 运算符优先级排列!++ --* / %+ -> < >= ==&&||= += *=
#include <stdio,h>int main (void){ 固定格式 return θ;}
直接写10代表10进制10(十进制)0b10(二进制)010(八进制)0x10(16进制)
#include <stdlib.h>"r+"就是在r的基础上加上写的权限;“w+”就是在写的基础上加上读的权限;"a+"就是在写的基础上加上读的权限;
返回值;就是函数调用表达式的值;每个函数都可以调用其他函数;只用main可以调用其他,其他不能调用main;每个大括号都是一个单独的作用域;一个函数里面所有的成员变量,都会随着这个函数的消失而消失;//不能返回一个函数内的局部变量的地址;当内存开辟一个main函数空间时,我们称之为main函数的栈;当开辟一个其他函数的空间时,也就是其他函数的栈。其他函数栈中的变量会随着栈的消失而消失;参数写成void就是没有参数的函数;void func(int a)//a为形参;{printf("%d",a);}int main(){func(5);//5是实参;//传参就是用实参给形参赋值;}
函数;将一些繁琐的,反复的,重复使用的代码,封装成一个函数,调用函数;
循环语句;while(表达式){ 语句;}//while可以看做是循环的if语句;当表达式为真时,执行语句,再次判断表达式是否为真,如果为真,再次执行;再次判断,再次执行,反复如此;所以在制作表达式时,可以用++或--!或者判断哪个地方加 break;break是跳出循环;break只会跳出循环和switch;continue表示跳回到表达式计算;
表达式:表达式(对变量)做了什么?表达式的值是什么?int a=3;char b=9;printf("%lu",sizeof(a+b));得4;自动类型转换:短字节向长字节看齐;有符号向无符号看齐;整型向浮点看齐;单精度向双精度看齐;整数默认是int类型;
short 短整型;short a=5 表示在内存中开辟2字节空间存放a=5这个数;0000 0000 0000 0101long长整型;在64位的CPU下:int 4字节;unsingnd:4字节;short 2字节;unsigned short 2字节;long8字节;unsigned long 8字节;打印:long %ld,short %d,int %d;不看怎么存,只看怎么读;想要打印8进制数:用%o来打印;想要打印十六进制数:用%x来打印;%d是10进制;无符号(unsigned)整型用%u来表示;无符号:unsignd 表示没有负数,只有正数;(在2进制数里最高位不表示正负了,如果是1,不表示负数,4字节空间下将会是一个很大的数:2的32次方;)字符常量:char;“A”:%d打印为65;(查看Ascll码表)char并不是字符变量,仍是整型;占1个字节;也有unsigned char! 在c中,如果sizeof(“A”)会显示4字节;在c中字符是以int存在的; ascll码表,最大数是127;一个字符默认是int存在;截断:当字符->char中的时候,高位存不下就会截断;短整型->长整型的时候,就会发生位扩展!实型(小数):float和double;float:保证6-7位是准确的;4字节double:15-16位是准确的;8字节;long double:17-18位是准确的,16字节
FILE * fp=fopen("./file","w")//如果不存在这个文件,会新建一个文件,如果有file这个文件,会清空里边的内容;清空之后,我们就可以重写;fwrite(文件空间地址[hello,world],单位信息的字节数[1],一共写入多少字节,写到哪个文件[fp]);写入文件的函数;再次运行fwrite();会接着写入进去,并不会覆盖掉;fclose(fp);FILE * fp=fopen("./file","a")//a表示apaad,表示写入的时候不会清空里边数据;
读:文件--->内存写:内存--->文件打开文件:fopen();FILE * fp = fopen("./file","r");//“r”:只读,if(!fp){perror("fopen");exit(-1);}fclose(fp);//打开了,就要几个关闭;//void *p;/p是任意指针变量;fread:
typedef :给变量类型起别名;(如 typedef int i_t;[i_t就是int的一个别名])一般,自创的类型用_t结尾;怎样声明一个变量,就怎样声明一个别名;size_t:表示大小的正数;typedef:有作用域;#define :宏没有作用域;