C的缺陷和陷阱读书笔记

词法陷阱

1、if语句的特殊用法

1、if(x>max) max=x;2、if(x>max?x;max)  //条件表达式,是执行第二个,否执行第三个3、if(x>max);  //条件成立后执行——空语句4、if((f=open(arg v[i],0))>0)  //open函数执行,成功返回后面的0(或者正数),执行失败则 返回-1//代码通过对open的执行结果赋值然后判断是否>0,来判断open函数执行是否成功

2、符号的贪心法

C语言的运算字符分为单字字符和多字字符,当有一串运算字符相连的时候——从第一个开始尽可能多的连接字符串,看连接起来的字符是否含有意义,直到多加一个就不会有意义的时候停止

1、a---b  //(a--)-b2、a-----b  //(a--)-(--b)

3、八进制的表示

  • 书面表示——(123)8、123o
  • 计算机表示——0123、/123

所以在计算机编程中,切记不能为了将数值对齐而把十进制123写为0123

4、字符与字符串

单引号引起一个字符的实质 —— 代表了一个整数

双引号引起的字符串的实质 —— 代表了一个指向无名数组的起始字符串的指针,该数组初始化为双引号之间的内容加 \0

指针——即内存地址,指针变量即用来存放指针的变量,有自己的内存编号和内存空间

5、条件运算符

可以直接作为一句代码写在文件里面,而不是非要与if语句组合才可以

ch = (ch > 'A' && ch < 'Z') ? (ch + 32): ch;

语法陷阱

1、首地址相关

指针指向首地址,指针变量是存储目标首地址的变量

取地址取到的是首地址,解引用得到的是首地址

2、运算符的优先级

优先级顺序:初等运算符>单目运算符>算术运算符>关系运算符>逻辑运算符>条件运算符>赋值运算符>逗号运算符

初等运算符包括圆括号()、下标运算符[ ]、结构体成员运算符->

运算符的结合性:单目运算符、条件运算符、赋值运算符及其扩展运算符,结合方向都是从右到左,其余的运算符都是从左到右

d511b0e8b602453080beb8489f0aa917.png

常见的优先级

  • && 优先于 ||
  • & 优先于 ^ 优先于 |
  • <、> 优先级于 == 和 !=
  • * 优先于 ++、--
  • +、-、*、/  优先于 <<
  • != 优先于 &

 

*p() 函数指针,要调用指针变量所指向的函数要使用 (*p)()

逗号表达式在只能返回一个结果或者只能有一个参数的时候:顺序计算,但只使用最后一个表达式的值;除此外都是顺序计算

3、switch语句

switch…case语句,case的值必须是整数或者 'a' 类的字符(单引号引起来的字符实质上是一个ASCII码对应的数字),在没有循环跳出语句的情况下,只要进入某一个入口,将不会对后面的入口条件进行判别,而会直接执行对应的语句

4、else语句的悬挂

else和if语句总是配对出现且是最短配对

语义陷阱

1、指针

  • 两指针变量的赋值,赋给目标的首地址,使用任何一个指针变量修改都会影响到目标
  • 给指针加一个整数就会跳到下一个存储单元,如果存储的是int,一次跳四个字节
  • 两指针指向的是同一个数组中的元素,指针相减的话得到两个指针的距离
  • 指针可以自增p++

2、数组

把数组作为参数传给一个函数的时候本质上传递的是该数组的首地址

只出现数组名时——本质是该数组的首地址

可加偏移量解引用取得偏移后的地址————n维数组可经过n次加偏移后的解引用

数组的初始化有以下几种方法

  • 直接初始化 (完全初始化)
    int arr[5] = {1, 2, 3, 4, 5};
    char arr[5]={"hello"};  或者 char arr[5]="hello";
  • 不完全初始化——后面的内容如果为0,可在标明数组长度的情况下,省略后面的0
    int arr[] = {1, 2, 3, 4, 5};
    ​
    int arr[10] = {1, 2};   //未初始化的部分为0
  • 遍历初始化
    int array[10];
    for(int i=0;i<10;i++)array[i]=0;
  • 集成初始化                              C99标准中规定数组长度可以为变量
    int array[i] = { [0]=0,[5]=10,[10]=23 };const int number=10;
    int array[number]={0};
    /*C99标准中规定数组长度可以为变量,即number*/
  • 动态初始化——此处使用的常变量可以做到一改全改,很方便(符号常量也有这个好处)
    int array[i] = { [0]=0,[5]=10,[10]=23 };const int number=10;
    int array[number]={0};
    /*C99标准中规定数组长度可以为变量,即number*/

3、sizeof和strlen

sizeof用于计算字符串的大小,包括后面的\0

strlen只计算有用的字符的个数,不包括\0,使用strlen计算的存储空间应为n+1

4、内存分配

malloc函数分配内存空间会沿着空闲链表找一个没用过的内存块

  • 函数的定义下的返回值为void*,所以使用的时候,应当强制转化其返回类型
  • 如果分配的内存小于使用的内存,就会顺序占用接下来的内存空间,该内存空间的值就会被清除
  • 不是用这块内存空间的时候要使用free函数释放该内存空间——因为此时的内存空间的占用为显式的内存分配,所以要使用函数显式的释放内存——不像局部变量属于是隐式的分配内存,故而释放内存的时候也是隐式的释放

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/175642.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

处理大数据的基础架构,OLTP和OLAP的区别,数据库与Hadoop、Spark、Hive和Flink大数据技术

处理大数据的基础架构&#xff0c;OLTP和OLAP的区别&#xff0c;数据库与Hadoop、Spark、Hive和Flink大数据技术 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&am…

前端的简单介绍

前端核心的分析 CSS语法不够强大&#xff0c;比如无法嵌套书写&#xff0c;倒是模块化开发中需要书写很多重复的选择器 没有变量和合理的样式复用机制&#xff0c;使逻辑上相关的属性值必须字面量的心事重复的输出&#xff0c;导致难以维护 CSS预处理器,减少代码的笨重&#…

DNS 域名解析系统

文章目录 前言什么是 DNS 域名解析系统为什么需要 DNS 域名解析DNS 是如何发展的hosts 文件维护域名和IP的映射关系DNS 系统&#xff08;服务器&#xff09;DNS 镜像系统 前言 前面为大家分享了关于计算机网络中应用层——自定义协议、传输层——UDP、TCP 协议、网络层——IP协…

pgsql 分组查询,每组取10条

需求&#xff1a; 按照表的字段分组&#xff0c;然后每组取10条结果&#xff0c;返回即可 sql 如下&#xff1a; SELECT* FROM (SELECT chk_id,feature_id,task_id, ROW_NUMBER () OVER (PARTITION BY chk_id ORDER BY chk_id) AS row_num FROM ics_check_report WHERE task…

肺癌不再是老年病:33岁作家的离世引发关注,有这些情况的请注意

近期&#xff0c;90后网络小说家七月新番和26岁男艺人蒋某某因肺癌去世&#xff0c;引发关注。他们都没有吸烟习惯&#xff0c;那么他们为什么会得肺癌呢&#xff1f;浙大二院呼吸内科副主任医师兰芬说&#xff0c;现在年轻人熬夜、加班导致身体过劳&#xff0c;在劳累情况下身…

Vue Router使用VueUse更改标签页名称的工具函数

进入正题 安装 npm i vueuse/core or pnpm i vueuse/core or yarn add vueuse/corerouter/helper.js import { useTitle } from vueuse/coreexport const usePageTitle (to) > {const projectTitle import.meta.env.VITE_APP_TITLE // 将可变名抽出到 .env 内配置cons…

element-plus走马灯不显示

问题描述 依赖正确&#xff0c;代码用法正确&#xff0c;但是element-plu走马灯就是不显示&#xff01;&#xff01; <div class"content"><el-carousel height"150px" width"200px"><el-carousel-item v-for"item in 4&qu…

Windows详细安装和彻底删除RabbitMQ图文流程

RabbiitMQ简介 RabbitMQ是实现了高级消息队列协议&#xff08;AMQP&#xff1a;Advanced Message Queue Protocol&#xff09;的开源消息代理软件&#xff08;亦称面向消息的中间件&#xff09;。RabbitMQ服务器是用Erlang语言编写的&#xff0c;而聚类和故障转移是构建在开放…

基于springboot框架的房屋租赁租房系统

功能如图所示 摘要 房屋租赁租房系统是一个基于Spring Boot框架开发的全新房地产管理平台&#xff0c;它旨在简化租房流程&#xff0c;提供房东和租户之间的高效互动&#xff0c;以满足现代社会对房屋租赁的不断增长的需求。该系统充分利用了Spring Boot的强大特性&#xff0c;…

arcpy.describe

描述 根据输入的数据&#xff0c;返回输入数据的属性 arcpy.da.Describe与arcpy.Describe返回的数据是一样的但是返回的的类型不一样&#xff0c;arcpy.da.Describe返回的是字典&#xff0c;arcpy.Describe返回的是string 如果要访问数据对象不存在的属性&#xff0c;将返回…

Yolo-Z:改进的YOLOv5用于小目标检测

目录 一、前言 二、背景 三、新思路 四、实验分析 论文地址&#xff1a;2112.11798.pdf (arxiv.org) 一、前言 随着自动驾驶汽车和自动驾驶赛车越来越受欢迎&#xff0c;对更快、更准确的检测器的需求也在增加。 虽然我们的肉眼几乎可以立即提取上下文信息&#xff0c;即…

美国人工智能政策公布

美国总统拜登 30 号上午发布了一项关于人工智能&#xff08;AI&#xff09;的行政命令&#xff08;EO&#xff09;。该行政命令最初以白宫情况说明书的形式向公众提供&#xff0c;“为人工智能安全和安保制定了新标准&#xff0c;保护美国人的隐私&#xff0c;促进公平和公民权…

【Linux】开发工具——vim多模式编辑器的入土设置sudoers白名单

个人主页点击直达&#xff1a;小白不是程序媛 Linux系列专栏&#xff1a;Linux被操作记 目录 前言&#xff1a; 基本概念 vim基本操作 [正常模式]切换至[插入模式] [插入模式]切换至[正常模式] [正常模式]切换至[末行模式] 三种模式的切换关系图 vim命令模式命令集 进…

骨传导耳机到底好用吗,到底骨传导耳机是不是噱头呢?

随着社会的飞速发展以及科技的不断提升&#xff0c;人们对健康的关注度也逐渐提高起来。而在这种背景下&#xff0c;骨传导耳机以其独特不可替代的优势&#xff0c;吸引了一大群骨传导爱好者的目光。 那么骨传导耳机是不是噱头呢&#xff1f;其实这种耳机不仅不会堵塞耳道&…

什么是接口自动化测试?接口自动化测试的目的是什么?

1、什么是接口测试 接口测试是对系统或组件之间的接口的测试。主要用于检测外部系统与系统间以及内部各个子系统间的交互点。测试重点是检查数据交换、传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 2、接口测试的目的 1> 尽早介入软件测试流程&#…

【23真题】邮电之首!扩招15倍!专业课难度骤降!

今天分享的是23年北京邮电大学804的信号与系统试题及解析。 本套试卷难度分析&#xff1a;北邮804在22年只招生6人&#xff0c;23年拟招生87人&#xff0c;扩招近15倍&#xff01;22年北京邮电大学804考研真题&#xff0c;我也发布过&#xff0c;若有需要&#xff0c;戳这里自…

墨者学院 身份认证失效漏洞实战

一、题目信息 二、漏洞利用 1.通过抓包&#xff0c;抓取test登录信息 发现card_id号以及一些回显的账号密码信息 搜索了一下这个id&#xff0c;发现是测试的头像 2.修改id号 分析请求包的逻辑&#xff0c;发现是请求了头像资源后再去请求头像id的详情包&#xff0c;所以根据…

怎么监控钉钉聊天记录内容(监控钉钉聊天记录的3种形式)

企业沟通工具的普及&#xff0c;越来越多的企业开始使用钉钉作为内部沟通工具。然而&#xff0c;对于企业管理者来说&#xff0c;如何监控钉钉聊天记录内容成为了一个重要的问题。本文将介绍几种方法&#xff0c;帮助企业管理者实现监控钉钉聊天记录内容的目的。 一、钉钉自带功…

【多线程面试题十七】、如果不使用synchronized和Lock,如何保证线程安全?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;如果不使用synchronized…

GZ035 5G组网与运维赛题第4套

2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项&#xff08;高职组&#xff09; 赛题第4套 一、竞赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通&#xff08;35分&#xff09; 子任务1&#xff1a;5G公共网络部署与调试&#xff08;15分&#xff09; 子…