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

news2024/9/24 17:17:26

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.coloradmin.cn/o/98077.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SPRING-了解1

1)最终address: 查找路径比较长&#xff0c;很有趣 JFrog 原始步骤1)进入 spring.io&#xff0c;点击右上角黑色标记边的标记 2)进入 git,找到 Binaries下面的 Spring Framework Artifacts 3)进一步找到Downlaoding a Distribution,下面有 https://repo.spring.io 4)x选择…

牛客SQL每日一题之SQL136 每类试卷得分前3名

文章目录SQL136 每类试卷得分前3名描述示例1输入&#xff1a;输出&#xff1a;答案SQL136 每类试卷得分前3名 描述 现有试卷信息表examination_info&#xff08;exam_id试卷ID, tag试卷类别, difficulty试卷难度, duration考试时长, release_time发布时间&#xff09;&#x…

C# 中的 Infinity 和 NaN

C# 语言中&#xff0c;对于 int&#xff0c;long 和 decimal 类型的数&#xff0c;任何数除以 0 所得的结果是无穷大&#xff0c;不在 int&#xff0c;long 和 decimal 类型的范围之内&#xff0c;所以计算 6/0 之类的表达式会出错。 但是&#xff0c;double 和 float 类型实际…

Java入门笔记补充

Java基础笔记补充数据类型数据类型整形拓展浮点型拓展字符型拓展类型转换变量变量作用域局部变量实例变量静态变量变量的命名规范数组三种初始化静态初始化动态初始化数组的默认初始化Arrays类内存分析栈 stack&#xff1a;堆 heap&#xff1a;方法区(也是堆)&#xff1a;封装继…

卷积神经网络 图像处理,卷积神经网络图片处理

1、在做图像处理时&#xff0c;如何提高识别算法的设计与效果的精度&#xff1f; 得到更多的数据 这无疑是最简单的解决办法&#xff0c;深度学习模型的强大程度取决于你带来的数据。增加验证准确性的最简单方法之一是添加更多数据。如果您没有很多训练实例&#xff0c;这将特…

AllegroBGA如何自动fanout操作指导

AllegroBGA如何自动fanout操作指导 当我们需要给BGA做fanout的时候,逐个pin去fanout是件比较麻烦的事情,下面介绍Allegro中如何自动fanout,以下图BGA为例 具体操作如下 选择Route-Create Fanout 选择Via类型,比如Via10 Via Direction BGA Quadrant Style Pin-via Space…

数字化母婴店,母婴智慧会员管理小程序

会员店想必很多小伙伴都接触过或有所耳闻&#xff0c;会员店的本质是通过好产品、好服务及好内容营造出完整且完美的用户消费体验&#xff0c;虽然纯会员店并不多&#xff0c;但如今越来越多的各行业商家意识到每个流量用户都很重要&#xff0c;需要维护好每个用户&#xff0c;…

18.Django大型项目之用户中心页面

1. 用户中心的搭建 1.1 基础搭建 这里&#xff0c;主要就是基础的页面渲染&#xff0c;使用的也是继承主模板&#xff0c;对其进行修改的方式。就直接看代码吧 1.2 上下文的应用 什么是上下文&#xff1f; 对于上下文&#xff0c;可以理解成一个公用的函数或者类 我们这里使…

Qt使用MSVC2015找不到编译器的解决办法

Qt使用MSVC2015找不到编译器的解决办法 1、问题描述 安装qt前&#xff0c;已安装vscode&#xff0c;构建套件MSVC2015 32/64bit出现红色感叹号&#xff0c;并报错构建套件中未设置编译器 2、解决办法 step1:通过windows SDK工具安装调试器。 工具下载地址&#xff1a;https:/…

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

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

Linux——组管理和权限管理

Linux组 基本介绍 在Linux中的每个用户必须属于一个组&#xff0c;不能独立于组外&#xff0c;在Linux中每个文件有所有者&#xff0c;所在组&#xff0c;其他组的概念。 所有者 一般为文件的创建者&#xff0c;谁创建了该文件&#xff0c;就自然的成为该文件的所有者。 查…

构造序列(模拟构造)

请你构造一个 01 序列&#xff0c;序列需要满足以下所有要求&#xff1a; 恰好包含 n 个 0 和 m 个 1。不存在两个或两个以上的 0 连续相邻。不存在三个或三个以上的 1 连续相邻。 输入格式 共一行&#xff0c;包含两个整数 n,m。 输出格式 输出共一行&#xff0c;如果存在…

【js记录】递归进行深拷贝时对于Object遍历方法的思考【深浅拷贝+object县官属性介绍+类型判断方法+for...in+for...of】

一、 前言&#xff1a;本文使用的 类型判断方法介绍 通过手写instaceof更好理解其作用及使用 1、 typeof 判断一个实例属于哪种类型 2、 instance 判断一个实例是否属于某种类型let person function(){ } let no new person(); no instanceof person; // true3、 原型…

IT分销商未来在哪里?南京创瑞丰向复合型产品方案商转型

在一个充满不确定性的市场中&#xff0c;思变求新是企业的唯一出路。 诚如IT分销领域&#xff0c;云计算、大数据、人工智能等技术的兴起&#xff0c;加速企业数字化转型的同时&#xff0c;亦对于传统IT分销市场的未来产生了深远影响。过去“搬箱子”、打价格战的方式方法正在…

Python中文件操作(读、写、关闭)

目录 一.什么是文件 二.python文件操作 1.open&#xff08;&#xff09;打开函数 注意 mode常用的三种基础访问模式 2.读操作相关方法 read&#xff08;&#xff09;方法&#xff1a; readlines&#xff08;&#xff09;方法: readline&#xff08;&#xff09;方法 for…

Linux性能学习(1.1):CPU_CPU缓存

文章目录1 简介2 工作机制3 Cache Line参考资料&#xff1a; 1. https://www.makeuseof.com/tag/what-is-cpu-cache/ 2. https://zhuanlan.zhihu.com/p/80672073 3.CPU Cache 机制以及 Cache miss 4.性能优化方法和技巧 在日常的嵌入式开发中&#xff0c;查看一些SOC的datashe…

想学习编程,该怎么开始,需要多长时间?

想学习编程,该怎么开始&#xff0c;需要多长时间&#xff1f; 其实学编程也没有啥特别的方法&#xff0c;和我们没基础学驾照差不多。 考A照、B照还是C照&#xff0c;我们先得拎清&#xff0c;它们的用途存在一定差异 。一样的&#xff0c;学编程是学C&#xff0c;Java、Pyth…

命令行在服务器的Oracle新建、修改用户并授权

1.前提解说 由于我是使用docker拉取的Oracle,这里截图的Oracle用户是原本安装好的Oracle用户。 2.步骤 1.Linux服务器切换到Oracle su oracle 2. 进入SQL sqlplus / as sysdba 3.新建用户(一定要加“&#xff1b;”) create user 用户名 identified by 密码&#xff1b; 若是修…

Tableau可视化设计案例-02Tableau数据处理、折线图

文章目录Tableau可视化设计案例02Tableau数据处理、折线图1.数据前处理2.绘制折线图2.1 创建电影数据变化折线图2.2创建电影票房变化折线图2.3 20215年的电影数量与票房比较分析Tableau可视化设计案例 本文是Tableau的案例&#xff0c;为B站视频的笔记&#xff0c;B站视频 参考…

Java集合/泛型面试题

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java面试题…