您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > C/C++/C#

C语言知识点总结篇

时间:2019-09-29 12:11:54  来源:  作者:

Debug和Release版本比较

  • Debug附加了许多调试信息,主要用于调试,故文件大;
  • Release是经过优化后的版本,去掉了调试信息,代码进行了优化,故文件较小,且编译速度快过Debug,用于发布平台的配置管理器的设置;

32位与64位

  • 32位,地址为32位,最大使用内存4G,只能运行32位的数据;
  • 64位,地址为64位,既可以运行32位的数据,也可以运行64位的数据;

指针

  • 指针是个量,对应一块内存区域;
  • 指针存储的是某个内存单元的地址;
  • 访问方式:
  • 1、直接访问:按变量地址存取变量值,取地址符&;
  • 2、间接访问:通过存放变量地址的变量去访问变量,间接运算符*;
  • 在函数中改变一个外部变量,需要变量的地址;
  • 若是数据,需要指向数据的指针存储数据的地址;
  • 若是指针,需要指向指针的指针存用户指针的地址;

数组与指针

  • p[i]等价于*(p+i),&p[i]等价于p+i;
  • a[i][j]等价于*(*(a+i)+j),&a[i][j]等价于*(a+i)+j, a[i]等价于*(a+i);
  • 行数组指针定义方法:数据类型(*指针变量名)[二维数组列数];
  • 二维数组地址不可变化,数据可以变化,可以在不修改地址的情况下管理数据,指针数组指向的数据不可变化,但地址可以变化,在不修改数据的情况下查看数据;
  • 三维数组与指针,A[i][j][k]的三种表达形式:*(A[i][j]+k)、*(*(A[i]+j)+k)、*(*(*(A+i)+j)+k);

函数与指针

  • 若在程序中定义了一个函数,在编译时,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址,称为这个函数的指针,int(*p)(int, int),代表定义p是指向函数的指针变量,可以指向类型为整形且有两个整形参数的函数;
  • 定义返回值为指针值的函数的一般形式:类型名 *函数名(参数列表);

malloc和free函数

  • 动态内存分配,无法知道内存具体位置时,想要绑定真正的内存空间,则要用到动态分配内存,原型为extern void* malloc(unsigned int size),空指针可以转换为任何类型的指针,size仅仅是申请字节的大小,并不管申请的内存块中存储的数据类型,故申请内存的长度需通过“长度 x sizeof(类型)”的方式给出,使用完之后要用free释放内存;
  • 一个类型的指针包含三个信息:地址、步长、内容如何解析;
  • 在栈区开辟一段内存,系统会自己回收,在堆区开辟一段内存,需要手动用free释放;

calloc和realloc函数

  • calloc原型:void* calloc(unsigned int num,unsigned int size),num:对象个数,size:对象占据的内存字节数,功能是为已经分配的内存重新分配空间并复制内容,会自动将内存初始化为0;
  • realloc原型:voidrealloc(void ptr,unsigned int size),ptr:已分配的内存地址,size:重新分配的字节数

内存分区

  • C/C++中,内存分为:堆、栈、自由存储区、全局/静态存储区、常量存储区;
  • 堆:由new分配的内存块,一般对应一个delete,若没用释放,则程序结束后操作系统自动回收;
  • 栈:编译器需要的时候分配,不需要时自动清楚的变量的存储区,通常是局部变量、函数参数等;
  • 自由存储区:由malloc等分配的内存块,必须用free释放;
  • 全局存储区:全局变量和静态变量的存储区域,未初始化的两者在相邻存的另一块区域,程序结束后自动释放;
  • 常量存储区:存放常量,不可修改;

sizeof和strlen

  • 实例
#include <IOStream>
#include <string.h>
int main()
{
 char str[10] = "hello";
 cout << sizeof(str) <<endl << sizeof("hello")<< endl << str(str)<< endl;
 system("pause");
 return 0;
}
  • 结果:
C语言知识点总结篇

 

  • 结论:对一个数组字符串,sizeof不管是否初始化,只输出其预留内存大小,而strlen()输出初始化后的字符串所占内存大小,不含'0';

gets和scanf

  • gets遇到换行符表示结束,而scanf遇到空格、制表符、换行则表示结束;

Unicode字符问题

  • char字符串可显示汉字,但字符不可以,字符连在一起用%c%c可以输出一个汉字;

结构体

  • 结构体引用方式:结构体数组名[下标].成员名;
  • 结构体指针变量引用成员形式:(*结构体指针名).成员名、结构体指针名->成员名、结构体变量名.成员名;

结构体字节对齐机制

  • 结构体变量大小是能够被其最宽基本类型成员的大小所整除;
  • 结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,若有需要编译器会在成员之间加上填充字节;
  • 结构体总大小为结构体最宽基本类型成员大小的整数倍,若有需要编译器会在最末一个成员之后加上填充字节;

共同体union

  • 使几个不同类型的变量共占一段内存(相互覆盖),长度=最长成员所占字节数,不能同时对所有成员初始化;

深拷贝与浅拷贝

  • 深拷贝:根据指针指向的值,重新申请内存,再以此将指针指向内容复制过来,有相互独立的内存空间,一般复制构造函数和strcpy等函数都是深拷贝;
  • 浅拷贝:把对象(结构)里的值完全复制给另一个对象(结构),对于地址也是照抄,类的默认复制构造函数是将类中非静态成员变量逐个复制,是浅拷贝;

文件分类

按逻辑

  • 记录文件:具有一定结构的记录组成(定长和不定长);
  • 流式文件:由一个个字符(字节)数据顺序组成;

按存储介质

  • 普通文件:存储介质文件(磁盘、磁带等);
  • 设备文件:非存储介质(键盘、显示器、打印机等);

按数据组织形式

  • 文本文件:ASXII文件,每个字节存放一个字符的ASCII码;
  • 二进制文件:数据按其在内存中的存储形式原样存放;

文件处理方法

  • 缓冲文件系统:高级文件系统,系统自动为正在使用的文件开辟内存缓冲区和非缓冲文件系统;
  • 低级文件系统:由用户在程序中为每个文件设定缓冲区;

fscanf和fprintf函数

  • 两者遇到空格或换行时结束;

文件型结构体

struct _iobuf
 {
char *_ptr;//当前缓冲区内容指针
int _cnt;//缓冲区还有多少个字符
char *_base;//缓冲区的起始地址
int _flag;//文件流的状态,是否错误或者结束
int _file;//文件描述符
int _charbuf;//双字节缓冲,缓冲2个字节
int _bufsiz;//缓冲区大小
char *_tmpfname;//临时文件名
};

fopen打开模式

  • 只读模式"r"打开文件,该文件必须存在,否则打开失败,r+,rb,rb+,rt,rt+模式打开文件,文件不存在也会失败;
  • 只写模式"w"打开,文件存在则长度清0,不存在则建立文件,w+,wb,wb+,wt,wt+模式打开文件,文件不存在则建立文件;
  • a以附加的方式打开只写文件,若文件不存在,则建立文件,存在则在文件尾部添加数据,a+以附加的方式打开可读写文件,不存在则建立文件,存在则写入数据到文件尾,at二进制数据的追加,不存在则创建,只能写、at+读写打开一个文本文件,允许读或在文本末追加数据,ab二进制数据的追加,不存在则创建,只能写;

阻塞模式和非阻塞模式

  • 非阻塞模式,会引起宕机,会一直执行;
system("start notepad");
  • 阻塞模式,不会引起宕机,执行一步后才能执行下一步;
system("notepad");

欢迎关注微信公众号:村雨1943;创作不易,未经同意,转载请注明出处~



Tags:C语言   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
1.字符串数组+初始化char s1[]="array"; //字符数组char s2[6]="array"; //数组长度=字符串长度+1,因为字符串末尾会自动添&lsquo;\0&lsquo;printf("%s,%c\n",s1,s2[2]);...【详细内容】
2021-12-08  Tags: C语言  点击:(47)  评论:(0)  加入收藏
一、问题提出问题:把m个苹果放入n个盘子中,允许有的盘子为空,共有多少种方法?注:5,1,1和1 5 1属同一种方法m,n均小于10二、算法分析设f(m,n) 为m个苹果,n个盘子的放法数目,则先对...【详细内容】
2021-11-17  Tags: C语言  点击:(49)  评论:(0)  加入收藏
前言很多事不深入以为自己懂了,但真正用到项目上,才发现了问题。曾以为自己写C语言已经轻车熟路了,特别是对软件文件的工程管理上,因为心里对自己的代码编写风格还是有自信的。(...【详细内容】
2021-08-27  Tags: C语言  点击:(84)  评论:(0)  加入收藏
C语言作为高级语言,用其编写的程序指令机器并不能识别,因此需要有一个编译器将其转换为机器可识别的二进制指令。C语言已经出现50多年的时间,其相关的编译器种类众多,从最早先的...【详细内容】
2021-08-24  Tags: C语言  点击:(132)  评论:(0)  加入收藏
一 什么是ANSI控制码(ANSI escape sequences)维基百科给出的解释如下:ANSI escape sequences are a standard for in-band signaling to control cursor location, color, font...【详细内容】
2021-08-02  Tags: C语言  点击:(167)  评论:(0)  加入收藏
字符分类: 宽字符函数普通C函数描述 iswalnum() isalnum() 测试字符是否为数字或字母 iswalpha() isalpha() 测试字符是否是字母 iswcntrl() iscntrl() 测试字符是否是控制符...【详细内容】
2021-07-19  Tags: C语言  点击:(132)  评论:(0)  加入收藏
取消宏定义定义变量的时候,不能够重复定义同名变量;同理,定义宏的时候,不可以重复定义同名的宏。例如:#define MAX 1000#define MAX 50此时,重复定义MAX宏,是不合法的代码。但是,我...【详细内容】
2021-07-13  Tags: C语言  点击:(124)  评论:(0)  加入收藏
函数参数传递指针变量在函数的定义中,函数的参数可以是各种变量,就包括指针变量。首先,我们来看看一个函数的定义:void func(char* p);该函数的名称叫做func,参数定义为 char* p...【详细内容】
2021-07-09  Tags: C语言  点击:(135)  评论:(0)  加入收藏
8 函数嵌套调用我们学习了函数的定义和使用,那么,函数在被调用之前,必须先进行定义或者声明。如下是一个程序测试例子: 程序运行结果如下: 可以看到,在main函数中调用了func函数。...【详细内容】
2021-07-03  Tags: C语言  点击:(351)  评论:(0)  加入收藏
程序输入与输出当我们操作一个linux终端的时候,执行linux命令程序,可以看到命令的输出信息,或者要求输入数据。那么,这些操作就是linux命令程序与用户进行交互。程序与用户的交...【详细内容】
2021-06-23  Tags: C语言  点击:(163)  评论:(0)  加入收藏
▌简易百科推荐
一、简介很多时候我们都需要用到一些验证的方法,有时候需要用正则表达式校验数据时,往往需要到网上找很久,结果找到的还不是很符合自己想要的。所以我把自己整理的校验帮助类分...【详细内容】
2021-12-27  中年农码工    Tags:C#   点击:(2)  评论:(0)  加入收藏
引言在学习C语言或者其他编程语言的时候,我们编写的一个程序代码,基本都是在屏幕上打印出 hello world ,开始步入编程世(深)界(坑)的。C 语言版本的 hello world 代码:#include <std...【详细内容】
2021-12-21  一起学嵌入式    Tags:C 语言   点击:(11)  评论:(0)  加入收藏
读取SQLite数据库,就是读取一个路径\\192.168.100.**\position\db.sqlite下的文件<startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0"/...【详细内容】
2021-12-16  今朝我的奋斗    Tags:c#   点击:(21)  评论:(0)  加入收藏
什么是shellshell是c语言编写的程序,它在用户和操作系统之间架起了一座桥梁,用户可以通过这个桥梁访问操作系统内核服务。 它既是一种命令语言,同时也是一种程序设计语言,你可以...【详细内容】
2021-12-16  梦回故里归来    Tags:shell脚本   点击:(18)  评论:(0)  加入收藏
一、编程语言1.根据熟悉的语言,谈谈两种语言的区别?主要浅谈下C/C++和PHP语言的区别:1)PHP弱类型语言,一种脚本语言,对数据的类型不要求过多,较多的应用于Web应用开发,现在好多互...【详细内容】
2021-12-15  linux上的码农    Tags:c/c++   点击:(17)  评论:(0)  加入收藏
1.字符串数组+初始化char s1[]="array"; //字符数组char s2[6]="array"; //数组长度=字符串长度+1,因为字符串末尾会自动添&lsquo;\0&lsquo;printf("%s,%c\n",s1,s2[2]);...【详细内容】
2021-12-08  灯-灯灯    Tags:C语言   点击:(47)  评论:(0)  加入收藏
函数调用约定(Calling Convention),是一个重要的基础概念,用来规定调用者和被调用者是如何传递参数的,既调用者如何将参数按照什么样的规范传递给被调用者。在参数传递中,有两个很...【详细内容】
2021-11-30  小智雅汇    Tags:函数   点击:(19)  评论:(0)  加入收藏
一、问题提出问题:把m个苹果放入n个盘子中,允许有的盘子为空,共有多少种方法?注:5,1,1和1 5 1属同一种方法m,n均小于10二、算法分析设f(m,n) 为m个苹果,n个盘子的放法数目,则先对...【详细内容】
2021-11-17  C语言编程    Tags:C语言   点击:(49)  评论:(0)  加入收藏
一、为什么需要使用内存池在C/C++中我们通常使用malloc,free或new,delete来动态分配内存。一方面,因为这些函数涉及到了系统调用,所以频繁的调用必然会导致程序性能的损耗;另一...【详细内容】
2021-11-17  深度Linux    Tags:C++   点击:(38)  评论:(0)  加入收藏
OpenCV(Open Source Computer Vision Library)是一个(开源免费)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android、ios等操作系统上,它轻量级而且高效---由一系列...【详细内容】
2021-11-11  zls315    Tags:C#   点击:(50)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条