C语言小知识点

2023-11-05

1.LPCSTR被定义成是一个指向以'\0'结尾的常量字符指针。 LPWSTR是wchar_t字符串。 例子: LPWSTR lpwstr = NULL。 LPWSTR lp = _T("asdfasgaf")。 

2.之所以能够实现条件编译是因为预编译指令是在编译之前进行处理的,通过预编译进行宏替换、条件选择代码段,然后生成最后的待编译代码,最后进行编译。

3、

#ifndef _A_H_

#define _A_H_

#endif

避免文件重复包含。

4.NBTS为null-byte-temnated string的缩写,表示以空字符结束的字符串。

5、system("cls");//清屏

6、malloc标准格式:

char* a;

a = (char*)malloc(50);

if(nullptr == a)

{

        return;

}

memset(a,0,50);

free(a);

和new的区别:

new做两件事:分配内存和调用类的构造函数,delete是:调用类的析构函数和释放内存。而malloc和free只是分配和释放内存。

new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存。自由存储区不等于堆,如上所述,布局new就可以不位于堆中。

7.在定义方法时,在最后一个形参后加上三点 …,就表示该形参可以接受多个参数值,多个参数值被当成数组传入。上述定义有几个要点需要注意:
可变参数只能作为函数的最后一个参数,但其前面可以有也可以没有任何其他参数
由于可变参数必须是最后一个参数,所以一个函数最多只能有一个可变参

8. #pragma comment(lib,"Ws2_32.lib")表示链接Ws2_32.lib这个库。

9.__declspec(dllexport)用于导出符号,也就是定义该函数的dll;__declspec(dllimport)用于导入,也就是使用该函数。因为这个头文件既要被定义该函数的dll包含,也要被使用该函数的程序包含,当被前者包含时我们希望使用 __declspec(dllexport) 定义函数,当被后者包含时我们希望使用 dllimport。

10.goto可以直接跳出最外层循环,跳到需要的地方,不过要尽量避免使用。

11.在字符串前加一个L表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节。如果在字符串前加_T,则编译器会根据编译目标环境选择合适的(Unicode还是ANSI)字符处理方式 。

12.首先需要说明的是sizeof和strlen都可以求长度,但是却有很大的区别,简单来说可以概括为以下几点:

     1、sizeof是一个关键字,而strlen确实一个函数。

     2、sizeof求的是字节长度,而strlen求的却是实际长度。

        比如int a=1;sizeof(a)==4而strlen(a)=1

     3、sizeof求的是分配过来的长度,而strlen求的却是实际使用的长度。

       比如:char a[30]="abcd";

       sizeof(a)=30;而strlen(a)=4;

     4、strlen求的长度是以'\0'结束的。

       比如char a[30];strlen(a)的结果是不定的,而sizeof(a)=30;

        同理:char a[30]={'a','b','c'};对于strlen来说也是不定的,而sizeof却是30。

      5、sizeof是在编译是计算的,而strlen是在运行是计算的。

13.ASCII和Unicode的区别:

14.被_stdcall修饰的函数,其参数都是从右向左通过堆栈传递的, 函数调用在返回前要由被调用者清理堆栈,一般被用于回调。

15.内联函数编译器将指定的函数体插入并取代每一处调用该函数的地方,从而节省了每次调用函数带来的额外时间开支。但在选择使用内联函数时,必须在程序占用空间和程序执行效率之间进行权衡,因为过多的比较复杂的函数进行内联扩展将带来很大的存储资源开支。

16、使用#pragma once可以避免文件被重复包含,但是它不支持跨平台,只需在头文件开头加上#pragma once即可。

17、正如我们可以从语法中得出的那样,整数文字有四种类型:

·  纯十进制,必须以非零数字开头。

·  八进制,任何以0开头的数字(包括纯0)。

·  二进制,需要前缀0b或0B。

·  十六进制,需要前缀0x或0X。

18、将一个整形地址强转成一个地址:int *p = (int*)0x123456。

19、如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止。如果相邻位域字段的类型相同,但其位宽之和大于类型的sizeof大小,则后面的字段将从新的存储单元开始,其偏移量为其类型大小的整数倍。

20、~是按位取反运算,与反码是不同的。反码法规定,正数原反补码相同,负数的反码为原码除符号位以外取反。

21、int a[10];这样就会开辟10*4字节的内存空间,是在你调用这个函数的时候,这个空间会存在于函数栈上。栈上的对象会在函数退出时失效。如果在.h文件,则会在new对象时开辟。

22、为了避免同一个头文件被包含(include)多次,C/C++中有两种宏实现方式:一种是#ifndef方式;另一种是#pragma once方式。

23、如何求幂次方?包含math.h头文件。利用Pow函数可以直接求数的次方,我们可以知道函数有两个参数,第一个参数为底数,第二个参数为指数,分别将代表的变量放入函数中。

24、//合法的二进制

int a = 0b101; //换算成十进制为 5

int b = -0b110010; //换算成十进制为 -50

int c = 0B100001; //换算成十进制为 33

25、

"./":代表目前所在的目录。

" . ./"代表上一层目录。

"/":代表根目录。

26、C 库函数 char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。

27、出现curdump或者double free异常,一般是由于多重释放,或者申请的内存空间不够,导致空间踩踏。

28、用typedef为现有类型创建别名,定义易于记忆的类型名

typedef定义函数指针例如:

typedef void (*func)(void);

另外一个好处就是利用

typedef int (*func)(void);

可以减少函数指针定义的繁琐,如果没有加上面的定义的话,当你函数要定义的时候需要的就是

void (*fn)(void);

这样才是表示一个函数指针,而如果有了

typedef int (*func)(void);

则不用那么麻烦,直接就可以用

func fn;

就表示是函数指针.

*int (pf)(int,int)等价于fun_TEST pf

29、声明和定义的区别。

变量的声明是用来告诉编译器变量的名称和类型,而不分配内存。

例如:

extern int var; // 声明

extern int ble =10; // 定义

typedef int INT; // 声明

struct Node; // 声明

上面代码中,语句 extern int var;表示 var 在别的文件中已经定义,提示编译器遇到此变量时在其它模块中寻找其定义。语句 extern int ble = 10;表示定义了变量 ble,这一点需要注意。

注意:即使是 extern ,如果给变量赋值了,就是定义了。

定义是为了给变量分配内存,可以为变量赋初值。

int value ; //声明 + 定义

上面代码中,变量名为 value,类型为 int ,分配 4 字节的内存(不同编译器会有差异)。

通常变量的定义和声明是同时发生的,注意:extern 变量类型 变量名 仅是声明。

区别

变量/函数可以声明多次,变量/函数的定义只能一次。

声明不会分配内存,定义会分配内存。

声明是告诉编译器变量或函数的类型和名称等,定义是告诉编译器变量的值,函数具体干什么。

30、注册更多的是一个中间层,管理底层驱动与上层应用之间的关系。

31、参数的默认参数只需要在声明中赋值一下即可,int A(int a,intb=1);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言小知识点 的相关文章

随机推荐

  • 逻辑回归(梯度上升、交叉验证)Python实现

    目录 1 介绍 2 算法实现 3 代码 4 实验结果 1 介绍 logistic回归又称logistic回归分析 是一种广义的线性回归分析模型 常用于数据挖掘 疾病自动诊断 经济预测等领域 例如 探讨引发疾病的危险因素 并根据危险因素预测疾
  • [shell/脚本]检索某个文件夹下的所有文件夹并且复制文件夹下文件到指定目录

    写一个脚本实现不同分支下的代码sync 递归去检索某个文件下的所有文件 bin bash usage source sync code sh 源码路径 目标路径 SOURCEDIR 1 TARGETDIR 2 if d SOURCEDIR
  • node、npm、cnpm踩坑

    文章目录 前言 一 cnpm i 报错无法使用 二 解决步骤 1 查看cnpm 是否安装 2 查看 node 和 npm 版本 3 处理 总结 前言 提示 npm install g cnpm registry https registry
  • vue项目请求控制请求头必须为https

    前言 因为很多项目必须要求是严格模式 不能有http请求 需要限制我们的请求头必须为https 如果是http的话 手动转成https来实现请求效果 实现方法 在 public index html 的 head 标签里面加入以下代码 效果
  • Step4:Angular调试方法

    1 方法一 采用VSCode编译器 下载插件debugger for chrome 选择调试 然后再选择chrome浏览器 在运行中输入npm start执行 就可以在代码中打断点了 2 方法二 在浏览器中按F12打开开发者工具 Sourc
  • Python第二课

    枭 Python第二课 今天讲解了Python的 内置函数 模块导入 序列 列表 切片操作 内置函数 divmod x y 用法 x y divmod a b 其中x返回值a b y返回值a b map func iterablies 用法
  • 4g网络设置dns地址_4G网速越来越慢,通过这三个简单的操作,网速成倍提升

    随着互联网的进步 从零几年开始移动手机在全国开始普及起来 网速也像火箭一样快速飙升 从2G发展到了现在的5G 不过 有很多网友表示 刚从2G或者3G升级到4G时 网速体验非常好 但近两年来的4G网速越来越慢 还卡顿 甚至感觉还不如以前的3g
  • 忘记网站服务器密码怎么办,忘记远程服务器的密码怎么办

    忘记远程服务器的密码怎么办 内容精选 换一换 如果在创建弹性云服务器时未设置密码 或密码丢失 过期 可以参见本节操作重置密码 密码丢失或过期前 已安装密码重置插件 公共镜像创建的弹性云服务器默认已安装一键重置密码插件 私有镜像创建的云服务器
  • Matlab—M_Map的实战学习笔记(一)M_Map库的安装

    最近在做美赛集训 做到了2020年的美赛A题 有关苏格兰附近鲭鱼和鲱鱼分布预测问题 在写论文的过程中 为了画几张精美的地图 可谓是历经千难万险 花费了不少时间 走了不少弯路 现在对使用matlab的m map映射库进行地图绘制做一个总结 力
  • Python:UnicodedecodeError编码问题解决方法汇总-彻底解决

    今天真的被编码问题一直困扰着 午休都没进行 也真的见识到了各种编码 例如 gbk unicode utf 8 ansi gb2312等 如果脚本程序中编码与文件编码不一致 就会报出UnicodedecodeError的错误 1 情景一 读文
  • python语法-面向对象(构造方法、魔术方法)

    python语法 面向对象 构造方法 魔术方法 1 构造方法 构造方法 python类可以使用 init 方法 称之为构造方法 可以实现 在创建类对象时 会自动执行 在创建类对象时 将传入参数自动传递给 init 方法使用 演示使用构造方法
  • Android中的定时器Timer、AlarmManager、CountDownTimer的使用

    1 Timer和TimerTask的使用 java util Timer定时器 实际上是个线程 定时调度所拥有的TimerTasks 1 创建一个Timer code class hljs cs has numbering style di
  • 解析 Linux 内核可装载模块的版本检查机制

    解析 Linux 内核可装载模块的版本检查机制 王 华东 系统工程师 自由职业者 简介 为保持 Linux 内核的稳定与可持续发展 内核在发展过程中引进了可装载模块这一特性 内核可装载模块就是可在内核运行时加载到内核的一组代码 通常 我们会
  • js获取到的时间减1秒或加1秒

    如题 使用时间戳来计算 function setDate time isAdd var date getCurTime time 也可以直接透传如 2021 5 8 var d new Date date var t s d getTime
  • 闲鱼把各种玩法做成了一个平台:哆啦A梦

    玩法平台背景 在闲鱼内我们把供给用户的闲鱼红包 支付宝红包 包邮券 宝卡等统称为用户权益 是闲鱼用户运营的重要策略 在拉新 留存 促活 裂变等方面都展现了其重要价值 在阿里内部管理权益的平台是拉菲 拉菲对外提供概率抽奖和领奖两种能力 各个业
  • 为什么gbk编码常用抽取正则表达式无法抽取“嘚瑟“的“嘚”字

    根据 GBK汉字内码扩展规范编码表 http ff 163 com newflyff gbk list 可以查到 嘚 字的编码为874e 而我们常用的gbk汉字抽取正则表达式为 x80 xff x80 xff 以python正则为例 抽取汉
  • Python基础--入门基础和数据类型测试题(二)

    Made By Zly All Right Reversed 上一篇 篇四 Python 入门基础和数据类型测试题 二 1 以下不属于Python语言保留字的是 A do B pass C while D def 2 表达式3 4 2 8
  • 第一讲 检索系统与数据库编程

    第一讲 检索系统与数据库编程 准备工作 1 检索系统 1 1 检索系统初识 1 1 1 什么是检索系统 1 1 2 从认知心理学看待检索系统 1 2 检索系统的四大法宝 1 2 1 检索的工具 结构化查询语言 SQL 1 2 2 检索的环境
  • Electron-builder打包和自动更新

    前言 文本主要讲述如何为 electron 打包出来软件配置安装引导和结合 github 的 release 配置自动更新 electron builder 是将 Electron 工程打包成相应平台的软件的工具 我的工程是使用 elect
  • C语言小知识点

    1 LPCSTR被定义成是一个指向以 0 结尾的常量字符指针 LPWSTR是wchar t字符串 例子 LPWSTR lpwstr NULL LPWSTR lp T asdfasgaf 2 之所以能够实现条件编译是因为预编译指令是在编译之前