C语言重点解剖关键字要点速记

news/2024/5/8 7:48:42/文章来源:https://blog.csdn.net/m0_73345579/article/details/128294433

1.在windows中,双击的本质是运行该程序,就是将程序(.exe)加载到内存当中去。任何程序在被运行之前都必须加载到内存当中去。

2.所有的变量本质都是在内存的某个位置开辟的。变量不能定义在硬盘上,因为变量必须在程序运行的时候才能被开辟,程序要运行,就必须在内存中。

3.定义的本质就是开辟一段空间,只能有一次,声明的本质是告知,可以进行多次。

4.register修饰的变量,不能取地址(&)。

5.所有的变量声明的时候不能设置初始值,因为没有开辟空间。

6.跨文件使用,变量必须要声明,函数可以不声明,但是会有一个警告。实际上警告就是编译的时候没有找到,但是链接的时候又找到了。

7.变量和函数在.h文件中声明的时候,尽量写上extern。变量必须带上extern,虽然不写不会报错,但是,不写的话编译器可能会认为是定义,而不是声明。

8.static修饰的全局变量,该变量只能在文件内被访问,不能被外部其他文件直接访问,但是可以间接访问,通过函数。

    也就是假设A文件中的一个全局变量被static修饰, B文件是无法访问该变量的,但是如果A文件中包括一个函数,该函数内部包括了该全局变量, B文件通过访问这个函数,间接访问到了这个变量。

9.static修饰函数,用法同上,利用另一个函数进行间接访问。

10.(重点)被static修饰的局部变量,生命周期延长了,但是它的使用范围并没有变。出了大括号,就不能使用。

9.栈区先使用高地值,再使用低地址。堆区相反。

722d06669480436da3c1305085aedfc0.jpg

10.命名:见名知意,大小驼峰。数字,字母,下划线。

11.数据存进变量的时候已经转化成补码了,和数据本身的正负号没有关系。变量只是一块空间存取数据而已。具体输出出来是什么数,要看%后面。

12.大端存储:按照字节为单位,低权值位数据存在高地之处。

13.小端存储:按照字节为单位,低权值位数据存在低地址处。

14.cpu计算最先单位为int,注意整型提升和截断。

15.规定1000 0000为-128。

16.计算机中所有计算都转换为加法,用补码计算。

17.注意'\0','0',0的区别。第一个和第三个是一个意思。

18.所有的无符号类型建议在后面加一个u。

19.if (0){;}这样写也可以注释代码,但是不推荐。

20.c99中有_Bool类型,#define为bool类型。

现在用的c语言标准是c89或c90,没有true和false,但是c99中有。占用一个字节。

21.微软提供了一个,BOOL x = TRUE

全大写的,大小为4个字节。但是只有微软的编译器才能使用。

22. C90使用int代替bool,0为假,其它都为真(负数)。

23.浮点数存储会有精度损失。

24.浮点数在进行比较的时候,绝对不能使用==。

25.浮点数比较要精度。fabs(x - y) < EPS。

26.fabs的参数为double型,返回值也是double型abs的参数为int型,返回值也是int型。abs是求一个整数的绝对值,而fabs是求一个实数的绝对值。

27.系统默认精度。

DBL_EPSILON double

 FLT_EPSILON float

要使用头文件<float.h>

28.浮点数精度比较不能加=。

29.'\0'和0和NULL意思是一样的。

30.#define NULL ((void *)0)

31.强制类型转换,该数的本质并没有发生变化。

32.else就近匹配,建议使用大括号。

33.#pragma warning(disable:4996)屏蔽报错

#define _CRT_SECURE_NO_WARNINGS 1

以上两种写法作用相同。

34. case和break之间不能定义变量。如果非要这么做的话,加一个大括号,把它变成一个完整的代码块。一般不推荐这样使用。如果非要这样做,将它分装成一个函数,调用函数使用。

35.case 后面可以使用return,但是不建议这样使用。

36.switch(),括号用户推荐使用布尔值。

37.case后不能使用const修饰的常变量。

38.switch语法结构中,case完成的是判定功能,break完成的是分支功能,default处理异常情况。

39.default推荐放在结尾。

40.任何C语言程序,在默认编译好之后,运行时都会打开三个输入输出流。

stdin:标准输入,FILE* stdin,键盘。

stdout:标准输出,FILE* stdout,显示器。

stderr:标准错误,FILE* stderr,显示器。

41.显示器打印出来的都是字符。printf()返回指示字符的个数。

42.键盘和显示器称为字符设备。

43.嵌套循环的时候,尽量把循环次数多的放在内侧,循环次数少的放在外侧。

44.循环尽量写半闭半开区间。好处是右边就是循环次数(左边从0开始)。如果左边不是从0开始的,循环指数就是右边减左边。

45.for循环,()中尽量不要使用浮点型。

45.goto不能跨越代码块,即{}。建议不要使用。

46.void 不能定义变量,vs中sizeof(void) == 0

gcc中为1。

47.int test(),虽然没有定义参数,但是可以传参(不被使用),编译器不会报错。

   int test(void),如果传参,vs有警告,gcc会报错。

48.void*指针可以被任意类型指针接收,也可以接收任意指针类型接收。

49.vs中void*指针不能加减,因为大小不明确。gcc可以。

因为栈帧结构在函数调用完毕会被释放,所以定义的临时定量也会被释放。

50.return语句不可返回指向栈内存和指针,因为该内存在函数体结束时被自动销毁。

51.函数的返回值具有常量属性。

52.char* p = "hello"

后面的内容被放到了内存中的常量区。所以内容不能被修改。

53.取地址(&),取的是地址最低的那个(一个int 型变量有4个地址)。在C语言中,不管什么类型变量,取它的地址永远取的是最低位的地址。(和大小端没有任何关系)

54.const int* p = &a;

int* q = (int*)p;

如果不加括号里的东西,编译器会警告。

int* p = &a;

const int* q = p;

编译器不警告。

55. C语言函数传参一定会产生临时变量,包括指针。

56.volatile作用是不要cpu优化,这个关键字一般不使用,除了多线程等情况下。

57.const volatile int a;这两个关键字不冲突,const 要求你不进行写入,volatile 意思是读取时,每次从内存中读,两者不冲突。

虽然volatile叫做易变关键字,但是仅仅描述它修饰的变量可能会变化,要编译器注意,并不是它要求对应变量必须变化。

58.在gcc中,空结构体大小为0。

59.联合体(union)中,所有成员以及自身的起始地址都是一样的,为最低地址,呈放射状。

60.如何判断大小端?第一是使用联合体,第二是使用指针。

61.联合体要求内存对齐(其大小能整除任何一个成员)。

62.int* a,b;

 a和b的类型不一样, a是指针,b是整型。

typedef int* int_p;

int_p a,b;

或者int* a,*b;

这样写的话,a和b都是指针类型。

#define int_p int*;这是纯粹的文本替换。

typedef定义之后是一种独立类型。

 

 

 

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

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

相关文章

软件设计师——项目管理

文章目录Gantt图与Pert图风险管理配置管理沟通管理题目举例Gantt图与Pert图 甘特图能够清晰描述每个任务的开始 / 结束时间及各任务之间的并行性&#xff0c;也可以动态地反映项目的开发进展情况&#xff0c;但难以反映多个任务之间存在的逻辑关系&#xff1b;PERT 利用项目的…

微机原理与接口技术笔记(持续更新)

文章目录前言储存系统与技术材料高速储存器缓冲储存器&#xff08;Cache&#xff09;材料&#xff0c;局部性&#xff0c;访问方式Cache全相联映射Cache交换与一致性单核CPU一致性处理多核CPU的MESI协议主储存器&#xff08;内存&#xff09;主要技术指标容量带宽内存模组与内存…

【C++进阶】C++11新特性上篇(万字详解)

&#x1f387;C学习历程&#xff1a;入门 博客主页&#xff1a;一起去看日落吗持续分享博主的C学习历程博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a; 也许你现在做的事情&#xff0c;暂时看不到成果&#xff0c;但不要忘记&…

[附源码]计算机毕业设计Python餐馆点餐管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

244. 谜一样的牛——二分+树状数组

有 n 头奶牛&#xff0c;已知它们的身高为 1∼n 且各不相同&#xff0c;但不知道每头奶牛的具体身高。 现在这 n 头奶牛站成一列&#xff0c;已知第 i 头牛前面有 Ai 头牛比它低&#xff0c;求每头奶牛的身高。 输入格式 第 1 行&#xff1a;输入整数 n。 第 2…n 行&#x…

UOS SDN

​ 文章目录 一.安装相关软件包二.上传并解压opendaylight软件包三.创建拓扑四.下发流表五.启动HTTP-server服务六.截图测试启动 OpenDayLight 的 karaf 程序,并安装如下组件: feature:install odl-restconf feature:install odl-l2switch-switch-ui feature:install odl-…

python制作问题搜索解答器,从此学习无忧

前言 大家早好、午好、晚好吖 ❤ ~ 今天博主给大家带来一个问题搜索解答器&#xff01;&#xff01; 需要素材 以及一双慧手和一个灵活的脑子~ 效果展示 代码展示 导入模块 import requests import tkinter as tk from tkinter import ttk import webbrowserdef search(wor…

Python中的魔法方法

python中的魔法方法是一些可以让你对类添加“魔法”的特殊方法,它们经常是两个下划线包围来命名的 Python的魔法方法&#xff0c;也称为dunder(双下划线)方法。大多数的时候&#xff0c;我们将它们用于简单的事情&#xff0c;例如构造函数(init)、字符串表示(str&#xff0c; r…

基于Geehy APM32F4移植使用letter-shell命令行终端

1. letter-shell简介 letter shell是一个C语言编写的&#xff0c;可以嵌入在程序中的嵌入式shell&#xff0c;主要面向嵌入式设备。 说得直白点他就是一个命令行交互软件&#xff0c;可以读取用户输入的命令&#xff0c;找到并执行命令对应的函数。 letter-shell的功能十分强…

XXL-Job分布式任务调度框架-- 集群HA的配置3

一 xxl-job集群概述 1.1 xxl-job集群HA的作用 为了避免单点故障&#xff0c;任务调度系统通常需要通过集群实现系统高可用 由于任务调度系统的特殊性&#xff0c;“调度”和“任务”两个模块需要均支持集群部署&#xff0c;由于职责不同&#xff0c;因此各自集群侧重点也有…

适合零基础人群学习的Python入门教程,快来学习吧

适合零基础人群学习的Python入门教程学什么&#xff1f;小编为大家准备的Python学习教程&#xff0c;课程主要讲解&#xff1a;Python核心编程、Linux基础、前端开发、Web开发、爬虫开发、人工智能等内容。 对于初学者想更轻松的学好Python开发&#xff0c;爬虫技术&#xff0c…

Go环境搭建与IDE开发工具配置

安装Go语言编译器 Go语言编译器》编译器将源代码编译为可执行程序》源代码程序员使用高级语言所书写的代码文件》高级语言c/c/go…》机器语言0和1构成&#xff0c;机器能直接识别》汇编语言比机器语言稍微可读一点点的指令集 编译器下载地址 根据系统下载对应的go编译器版本…

三分查找算法

目录 一 算法简介 详细介绍 两种基本方法 二 算法实践 1&#xff09;实数三分 拓展&#xff1a;秦九韶算法计算多项式 方法1&#xff1a;直接模拟累加 方法二&#xff1a;根据秦九韶算法 1&#xff09;模板三分法 题目描述 解法 2&#xff09;三分求极值 题目描述 …

Python:遗传算法最优路径

Hello&#xff0c;大家好&#xff01;读研前写过一篇遗传算法的代码&#xff0c;比较简单&#xff0c;算是个入门&#xff0c;当时就有想用它来解决最优路径的问题&#xff0c;上算法导论课时碰巧有听到同学有分享过&#xff0c;但由于自己研究的方向不是这块&#xff0c;就没有…

C# 绘图基本方法

一得到Graphics对象 1 OnPaint事件中使用 Protected overrid void OnPaint(PaintEventArgs e) {Graphics ge.Graphics;...... }2 其他情况实现 Graphics gthis.CreaateGraphics();二 关于Graphics的释放 1 对于CreateGraphics&#xff08;&#xff09;得到的Graphics对象&a…

【Linux权限】文件权限值,权限掩码,粘滞位,普通用户添加信任名单

目录 1.权限分为2种用户&#xff1a;超级用户&#xff0c;普通用户 2.文件类型和访问权限 ​3.权限掩码&#xff08;八进制&#xff09; 4.sudo短暂提升权限 5.粘滞位 1.权限分为2种用户&#xff1a;超级用户&#xff0c;普通用户 超级用户&#xff08;通常为root&#x…

ArcGIS Pro 加载项(5)——样式符号属性对调

之前是已经通过Python构建脚本工具&#xff0c;实现了stylx文件的符号属性的对调。 ArcGIS Pro脚本工具&#xff08;12&#xff09;——样式符号属性对调_学学GIS的博客-CSDN博客为地类做样式符号匹配经常碰到这样的问题&#xff1a;属性表里面只有地类代码&#xff0c;但是做…

安全分析模型

安全分析模型自动化调优 MLOps&#xff08;Machine Learning Operations&#xff09;是一种人工智能 的工程实践&#xff0c;是面向机器学习项目的研发运营管理体系 。旨在实现 ML 管道的操作、ML 模型的部署和管理标准化&#xff0c;支持ML 模型的发布、激活、监控、性能跟踪…

MacOS配置GitHub SSH-key

mac和linux配置方法基本类似 打开终端连接到账户 git config --global user.name "xxxx" git config --global user.email "xxxxqq.com" 创建ssh-key ssh-keygen -t rsa -C "xxxxqq.com" 一路enter选择默认项&#xff0c;创建完成 查…

【云服务器 ECS 实战】一文掌握负载均衡服务原理及配置方法

一、负载均衡基本原理概述协议/端口轮询策略会话保持二、云服务器 ECS 负载均衡相关配置协议&监听配置后端服务器配置健康检查配置测试在上期文章中&#xff0c;介绍了负载均衡的概述及优势&#xff0c;并详细演示了阿里云服务器负载均衡服务的选型与购买配置。本期文章我们…