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;
}
  • 结果:

  • 结论:对一个数组字符串,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;创作不易,未经同意,转载请注明出处~

C语言知识点总结篇的更多相关文章

  1. C语言知识点复习梳理

    C语言知识点复习梳理 C语言的知识点讲完了,接下来就是做一下整理与总结,然后就会进入其他知识的学习. 本文目录如下: 基础知识. 顺序程序设计. 数据类型. 标准输入输出. 进制转换. 选择结构. 循 ...

  2. [iOS]C语言知识点系列视频

    C语言知识点系列视频 目录 C语言技术视频-01-变量的定义 C语言技术视频-02-程序分支结构(if...else) C语言技术视频-03-程序分支结构(switch) C语言技术视频-04-程序循 ...

  3. Scala语言笔记 - 第一篇

    目录 Scala语言笔记 - 第一篇 1 基本类型和循环的使用 2 String相关 3 模式匹配相关 4 class相关 5 函数调用相关 Scala语言笔记 - 第一篇 ​ 最近研究了下scala ...

  4. 快速上手系列-C语言之指针篇(一)

    快速上手系列-C语言之指针篇(一) 浊酒敬风尘 发布时间:18-06-2108:29 指针的灵活运用使得c语言更加强大,指针是C语言中十分重要的部分,可以说指针是C语言的灵魂.当然指针不是万能的,但没 ...

  5. 知识点:C语言进阶提高篇,自定义数据类型:枚举

    一.枚举的概念 枚举是C语言中的一种基本数据类型,并不是构造类型,它可以用于声明一组常数.当一个变量有几个固定的可能取值时,可以将这个变量定义为枚举类型.比如,你可以用一个枚举类型的变量来表示季节,因 ...

  6. 知识点回顾——C语言知识点复习梳理,看看你是不是都完全掌握了

    前段时间,我分享了关于C语言的一些必备知识点,感兴趣的朋友可以查看我的往期文章,或是关注公众号c语言进阶之路,查看次条文章,或搜索关键字"编程小白基础必备",就能查看相关文章了. ...

  7. 瘋子C语言笔记(指针篇)

    指针篇 1.基本指针变量 (1)定义 int i,j; int *pointer_1,*pointer_2; pointer_1 = &i; pointer_2 = &j; 等价于 i ...

  8. 深入研究C语言 第三篇

    本篇研究TC2.0下其他几个工具.同时看看TC由源代码到exe程序的过程. 1. 用TCC将下面的程序编为.obj文件 我们知道,TCC在默认的编译连接一个C语言的源程序a.c的时候分为以下两步: ( ...

  9. C语言知识点总结

    本文采用思维导图的方式撰写,更好的表述了各知识点之间的关系,方便大家理解和记忆.这个总结尚未包含C语言数据结构与算法部分,后续会陆续更新出来,文中有漏掉的知识点,还请大家多多指正.

随机推荐

  1. 03篇ELK日志系统——升级版集群之ELK日志系统整合springboot项目

    [ 前言:整个ELK日志系统已经搭建好了,接下来的流程就是: springboot项目中的logback日志配置通过tcp传输,把springboot项目中所有日志数据传到————>logsta ...

  2. Reactive-MongoDB 异步 Java Driver 解读

    一.关于 异步驱动 从3.0 版本开始,MongoDB 开始提供异步方式的驱动(Java Async Driver),这为应用提供了一种更高性能的选择.但实质上,使用同步驱动(Java Sync Dr ...

  3. tomcat server.xml 中 host 元素

    测试偶然发现: <Host name="127.0.0.1" appBase="webapps" unpackWARs="true" ...

  4. MySQL复制技术

    MySQL高可用方案 投票选举机制,较复杂 MySQL本身没有提供replication failover的解决方案,自动切换需要依赖MHA脚本 可以有多台从库,从库可以做报表和备份 MySQL复制技 ...

  5. PHP包管理工具composer

    环境:  centos7 一.linux上安装composer 前提:已安装了php 1. 下载composer安装包 php -r "copy('https://install.phpco ...

  6. Spring——JDBC——数据库

    1.Spring 的数据访问哲学 数据访问的功能放到一个或者多个专注于此项任务的组件.这样的组件通常称为数据访问对象(data access object)DAO或者Repository. 为了避免应 ...

  7. socket套接字及粘包问题

    socket套接字 1.什么是socket socket是一个模块,又称套接字,用来封装互联网协议(应用层以下的层) 2.为什么要有socket 实现应用层以下的层的工作,提高开发效率 3.怎么使用s ...

  8. 破解优酷VIP视频

    目录 一 破解优酷VIP视频 一 破解优酷VIP视频 import requests import re import json HEADERS = { 'user-agent': 'Mozilla/ ...

  9. DB2数据库

    必需步骤: 您已经启用了 DB2 扩展 Windows 安全性.您必须将运行 DB2 本地应用程序或工具的 DB2 用户添加至 DB2ADMNS 或DB2USER 组 可以使用端口号 "50 ...

  10. php+ajax无刷新分页原生ajax实现分页最简单完整实例-完整代码,

    展示页面:index.html <html><script> function ajax_show() { // 获取当前页 var page =1; var xhr = ne ...