ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

C语言核心语法

C语言核心语法 小结程序结构运算符 与 逻辑语句二进制解码逻辑语句数组函数指针结构体链表程序结构导入库(头文件)stdio.h 标准输入输出库 (在代码中使用的scanf printf等函数都是这个库中的)stdlib.h 动态内存分配 malloc 数值类型转换math.hstring.h- 主函数 int main(){ } 程序的入口在其中可以调用主函数之前定义的常量 函数等输出语句printf 格式化输出语句格式 (“输出的内容与对应的占位符”,数据参数,…)printf(Hello World\n);printf(我有 %d 个苹果\n,5);数据类型与变量基本类型 占用空间 与 取值范围整数型int long long浮点型float double字符型char字符串 char 类型的数组经过了特殊的处理值可以使用双引号括起来 char xx[字符数1]“值”;数组 可以存储多个同类型元素的数据结构 在内存中是一整块空间可以使用下标操作指针 指针变量用来存储其他变量的内存地址结构体是自己定义的一个数据类型可以将多个数据放在一起。比如学生(姓名 年龄 学号 班级)inta10;floatf3.14f;charcA;charname[6]Tom;格式化占位符在格式化输出语句中以及格式化输入语句中替代数据占一个输出位置的标记符号%d %ld %lld%f %lf %.2f .2精确小数点后2位输出%c%s 字符串%p 指针- 打印是一个16进制的数字转义符用来在字符串中输出一些不可见字符 和需要特殊处理的字符换行: \n 回车\r 制表符\t双引号 单引号’ 反斜杆\printf(第一行\n第二行\n);printf(他说\你好\\n);输入语句 格式化输入语句scanf(“格式化占位符”,变量名);intn;scanf(%d,n);取地址符 取地址符。将变量的地址取出来存入一个指针变量中通过指针操作这个地址中的数据运算符 与 逻辑语句算术 - * / %赋值比较 ! 逻辑 || !三目运算符 条件 ? 值1:值2;int n ab?a:b;int m a0?-a:a;位移运算符将变量数据的二进制码进行操作右移符 左边补0 右边移出int x 71; (111 1 011)x3左边是高位右边是低位移出范围的二进制码直接消失左边会补0左移符 左边移出 右边补0右移1位 相当于整除2左移一位 相当于乘以2inta17/5;intb71;intc71;上面三行分别是整数相除小数被丢掉结果是 37 右移一位是 37 左移一位是 14。二进制解码了解一下 计算机 如何实现 - * / 等运算0000 0000 0000 0000 0000 0000 0000 0111 1 7 0000 0000 0000 0000 0000 0000 0000 0011 1 3 0000 0000 0000 0000 0000 0000 0000 0110 1 6 0000 0000 0000 0000 0000 0000 0000 1100 12 --- 0-12的二进制码 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100逻辑语句条件判断语句if-elseswitch case: 匹配语句循环语句:for while do-whileif(score60){printf(及格\n);}else{printf(不及格\n);}for(inti0;i5;i){printf(%d ,i);}数组数组的类型设定数组的长度是固定的数组的下标不要超过范围排序、查找、求和、平均值等操作看个例子intnums[5]{5,3,8,1,9};printf(%d\n,nums[0]);intsum0;for(inti0;i5;i){sumnums[i];}下标从 0 开始所以nums[0]取的是第一个元素 5。长度固定这一点用 sizeof 算出来就知道了sizeof(nums)/sizeof(nums[0])结果是 5。越界不会报错会读到别人的内存只能自己注意。函数格式 返回值类型 函数名(参数类型 参数名){ 函数体 }返回值定义函数时设定在函数执行完成之后需要返回什么数据返回值类型就设定为该数据的类型在函数执行结束的地方使用return返回一个匹配类型的数据、带数据的变量调用带返回值的函数时在函数的前面定义一个与返回值类型一样的变量 等于 这个函数式调用int a abs(-100);参数定义函数时预设一组变量知道类型不知道具体的值只用于完成函数中逻辑代码编写调用函数时一定要根据参数设定来传入对应匹配的数据、带数据的变量 按照匹配的类型 顺序 数量传入定义函数的优点缺点优点将程序中一些重复执行的代码定义出来然后通过调用函数的形式复用代码提高代码的简洁性可重用性可维护性缺点函数中属于一个局部空间将数据作为参数传入时要考虑作用域的问题intadd(inta,intb){returnab;}intmain(){intsumadd(3,5);printf(%d\n,sum);}参数是值传递函数里改不动外面的变量想改要传地址voidchange(int*p){*p999;}change(num);指针使用一个指针变量存储其他的变量的地址编码在变量传递的时候比较方便将数据变量作为参数传入函数时如果需要在函数中修改该数据变量的值通常需要使用指针类型作为参数传入该变量的地址进去指针是地址操作与数组下标通用 在我们实现动态数组中比较需要通过使用内存分配空间来替代数据做到存储数据空间替换 因为普通的数组名本质是一个常量定义之后不能改intx42;int*px;printf(%d\n,*p);*p100;p存的是x的地址*p就是顺着这个地址把值取出来所以打印出来是 42。最后一句通过指针把x改成了 100。指针和数组下标是通着的nums[i]*(numsi)数组名是常量不能改所以想要能变的数组就得用 mallocint*arr(int*)malloc(5*sizeof(int));free(arr);结构体与类与对象的类非常像 可以通过设定一个结构类型其中自定义多个不同类型的数据变量结构体变量创建之后可以使用结构体变量调用其中的数据变量进行赋值 等使用场景定义和使用structStudent{charname[20];intage;floatscore;};structStudents{张三,18,92.5f};printf(%s %d %.1f\n,s.name,s.age,s.score);变量本身用点指针用箭头structStudentstu;structStudent*psstu;stu.age18;ps-age18;最后两句是等价的ps-age就是(*ps).age的简写。链表组成结构 节点结构体变量 每个节点都包含了一个数据变量 和下一个节点指针变量通过节点中下一个节点的指针可以进行 从头到尾的循环遍历操作typedefstructNode{intdata;structNode*next;}Node;添加元素先连上再挪尾巴顺序不能反Node*node(Node*)malloc(sizeof(Node));node-datadata;node-nextNULL;tail-nextnode;tailnode;遍历就是一路走到 NULLNode*curhead;while(cur!NULL){printf(%d ,cur-data);curcur-next;}删除要记住前一个节点让它绕过被删的那个prev-nextcur-next;free(cur);删的是头节点要单独处理因为头节点没有前一个。
返回列表