C语言的Static inline 函数的作用
 
 
【printf打印格式】
%x  打印十六进制
%d 打印十进制
%b 打印二进制
%c 打印字符
%s 打印字符串
%f 打印单精度float
%lf 打印双精度double
 
【关于C++中的类型转换】
dynamic_cast: 通常在基类和派生类之间转换时使用,把一个派生类转换为基类使用这个转换,run-time cast
 
const_cast: 转换是去掉const变量的const, 主要针对const和volatile的转换.
 
static_cast: 一般的转换,类似于C/C++里面的强制类型转换。no run-time check.通常,如果你不知道该用哪个,就用这个。
 
reinterpret_cast: 用于进行没有任何关联之间的转换,比如一个字符指针转换为一个整形数。
 
 
【位域问题】
#include <stdio.h>
int main(void)
{
     struct bs{
          unsigned a:1;   //a 变量取值为0,1
          unsigned b:3;  //b 变量取值为0到2的3次方-1
          unsigned c:4;  //c 变量取值为0到2的4次方-1
     } bit, *pbit;
 
     bit.a = 1;
     bit.b = 7;
     bit.c = 15;
     printf("%d,%d,%d \n",bit.a,bit.b,bit.c);
 
     pbit = &bit;
     pbit->a = 0;
     pbit->b &= 3;
     pbit->c |= 1;
     printf("%d,%d,%d \n",pbit->a,pbit->b,pbit->c);
 
     //printf("the aaa struct sizeof: %d\n", sizeof(data));
     return 0;
}
 
 
【位移运算】
<< 左移运算
#include

<stdio.h>

 
int

mainvoid)

{
                size_t a = 2;
                printf(

"a<<3 = %d\n",a<<3);

                

return 0;

}
 
结果: a*(2*2*2) = 16
 
>> 右移运算
     #include <stdio.h>
 
      int mainvoid)
     {
                size_t a = 16;
                printf( "a>>3 = %d\n",a>>3);
                 return 0;
     }
 
结果:a/(2*2*2) = 2
 
【避免重复的编译的宏定义】
    #ifndef _TEST_HEAD_H_
    #define _TEST_HEAD_H_
 
    代码体......
 
    #endif
 
【C和C++混合编译的宏定义】
    #ifdef __cplusplus
    extern "C" {
    #endif
 
    代码体......
 
    #ifdef __cplusplus
    }
    #endif
 
 
【C语言注释标准】
    单行:
    /** The length of the activequeues array */ 
    
    多行:
    /** The length of the activequeues array 
    *    The length of the activequeues array 
    */
 
【宏定义】
    (1)、Windows编译器判断
    #ifdef WIN32
    /* If we're on win32, then file descriptors are not nice low densely packed
   integers.  Instead, they are pointer-like windows handles, and we want to
   use a hashtable instead of an array to map fds to events.
    */
    #define EVMAP_USE_HT
    #endif
 
    (2)、宏定义判断
    #ifdef EVMAP_USE_HT
        #include "ht-internal.h"
        struct event_map_entry;
        HT_HEAD(event_io_map, event_map_entry);
    #else
        #define event_io_map event_signal_map
    #endif
 
 
 
【位运算】
     1. and运算
      and运算通常用于二进制取位操作,例如一个数 and 1的结果就是取二进制的最末位。
        这可以用来判断一个整数的奇偶,二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数。
相同位的两个数字都为1,则为1;若有一个不为1,则为0。  00111  11100  (&;或者and)  ----------------  00100

2. or运算

or运算通常用于二进制特定位上的无条件赋值,例如一个数or 1的结果就是把二进制最末位强行变成1。
        如果需要把二进制最末位变成0,对这个数or 1之后再减一就可以了,其实际意义就是把这个数强行变成最接近的偶数。
        相同位只要一个为1即为1。  00111  11100  (|或者or)  ----------------  11111
    
     3. xor运算
异或的符号是⊕。  xor运算通常用于对二进制的特定一位进行取反操作,因为异或可以这样定义:0和1异或0都不变,异或1则取反。
        xor运算的逆运算是它本身,也就是说两次异或同一个数最后结果不变,即(a xor b) xor b = a。
        xor运算可以用于简单的加密,比如我想对我MM说1314520,但怕别人知道,于是双方约定拿我的生日19880516作为密钥
        1314520 xor 19880516 = 20665500,我就把20665500告诉MM。MM再次计算20665500 xor 19880516的值,得到1314520,于是她就明白了我的企图。
相同位不同则为1,相同则为0。  00111  11100  (^或者xor)  ----------------  11011
 
【进制】
      9、C语言中使用16进制
 

至于宏定义为什么喜欢定义成 0xf 什么的,还有经常看到定义成0x00000001 这种形式的。

        首先计算机运算全是通过2进制进行的,所以把16进制(0x 代表这个数是16进制的)转换成2进制,那么f 就是 1111。

c语言基础教程书上都有这么一课,就是位运算,"|","&", 等等操作符。当表现一个对象有几种属性时候,它可以并列拥有几种属性,比如一件衣服,他可以是蓝色(定义蓝色为 0001 即0x1),红色(定义红色为0010,即0x2),
黑色(定义为0100,即0x4),白色(1000,0x8)
所以当你看到这件衣服时候,有个表示告诉你他的属性是0xf,即1111,就表示4种颜色它全具备,如果属性是0xa,即1001,那表示它具有 蓝色 和 白色 2种属性。
这么讲比较通俗点吧。。。。至于宏定义为什么喜欢定义成 0xf 什么的,还有经常看到定义成0x00000001 这种形式的。
首先计算机运算全是通过2进制进行的,所以把16进制(0x 代表这个数是16进制的)转换成2进制,那么f 就是 1111。
c语言基础教程书上都有这么一课,就是位运算,"|","&", 等等操作符。当表现一个对象有几种属性时候,它可以并列拥有几种属性,比如一件衣服,他可以是蓝色(定义蓝色为 0001 即0x1),红色(定义红色为0010,即0x2),
黑色(定义为0100,即0x4),白色(1000,0x8)
所以当你看到这件衣服时候,有个表示告诉你他的属性是0xf,即1111,就表示4种颜色它全具备,如果属性是0xa,即1001,那表示它具有 蓝色 和 白色 2种属性。
这么讲比较通俗点吧。。。。
    
 
【链表】
 
        

链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。

    

基本原理:

        

1、 单链表:每一个节点里存到下一个节点的指针(Pointer)

           2、 循环链表:

循环链表是与单链表一样,是一种链式的存储结构,所不同的是,循环链表的最后一个结点的指针是指向该循环链表的第一个结点或者表头结点,从而构成一个环形的链。

                 

循环链表的运算与单链表的运算基本一致。所不同的有以下几点:

        1、在建立一个循环链表时,必须使其最后一个结点的指针指向表头结点,而不是象单链表那样置为NULL。此种情况还使用于在最后一个结点后插入一个新的结点。
        2、在判断是否到表尾时,是判断该结点链域的值是否是表头结点,当链域值等于表头指针时,说明已到表尾。而非象单链表那样判断链域值是否为NULL。
           3、 双向链表:

双向链表其实是单链表的改进。

               
当我们对单链表进行操作时,有时你要对某个结点的直接前驱进行操作时,又必须从表头开始查找。这是由单链表结点的结构所限制的。因为单链表每个结点只有一个存储直接后继结点地址的链域,那么能不能定义一个既有存储直接后继结点地址的链域,又有存储直接前驱结点地址的链域的这样一个双链域结点结构呢?这就是双向链表
在双向链表中,结点除含有数据域外,还有两个链域,一个存储直接后继结点地址,一般称之为右链域;一个存储直接前驱结点地址,一般称之为左链域。
    设计实现:
 
【栈】
    基本原理:后进先出的规则
        1 顺序栈:使用数组实现顺序存储数据
        2 链栈:使用指针实现链式存储数据
    设计实现:
 
########################################################################################
 
【队列】
 
########################################################################################
 
【内存分配】

realloc

        extern void *realloc(void *mem_address, unsigned int newsize);
语法:指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。//新的大小一定要大于原来的大小,不然的话会导致数据丢失!
头文件:#include <stdlib.h> 有些编译器需要#include <malloc.h>,在TC2.0中可以使用alloc.h头文件
功能:先判断当前的指针是否有足够的连续空间,如果有,扩大mem_address指向的地址,并且将mem_address返回,如果空间不够,先按照newsize指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来mem_address所指内存区域,同时返回新分配的内存区域的首地址。即重新分配存储器块的地址。
返回值:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
注意:这里原始内存中的数据还是保持不变的。当内存不再使用时,应使用free()函数将内存块释放。
 
calloc是一个ISO C函数
函数名: calloc
函数原型:void *calloc(unsigned n, unsigned size);
功 能: 在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。
malloc的区别:
calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。
 

C/C++之学习笔记的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

  10. ucos实时操作系统学习笔记——任务间通信(消息)

    ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...

随机推荐

  1. ubuntu16.04下安装pangolin

    安装教程,具体可以参考github上pangolin的安装文档 https://github.com/stevenlovegrove/Pangolin 首先要安装pangolin的各种依赖项 Glew ...

  2. 用栈来递归 模板 honoi

    用栈来模拟递归的技巧 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<vector> #include& ...

  3. POJ - 1191 棋盘分割 记忆递归 搜索dp+数学

    http://poj.org/problem?id=1191 题意:中文题. 题解: 1.关于切割的模拟,用递归 有这样的递归方程(dp方程):f(n,棋盘)=f(n-1,待割的棋盘)+f(1,割下的 ...

  4. Oracle体系结构之参数文件管理

    参数文件作用:主要用来记录数据库配置信息,数据库在启动时,需要读取参数文件中关于控制文件的信息,分配内存,打开进程,会话等.数据库启动时第一个读取参数文件. 参数文件分类: 1)pfile:文本文件, ...

  5. nginx分区域名转发 tp5域名分目录配置

    需求 本来我们一般情况下都是域名abc.com解析到网站的根目录/root/public这种.但是客户突然提出了一个奇葩的需求,客户要求以后可能网站会增多,需要增加分区的功能,比如abc.com/wh ...

  6. 【mlflow】执行import mlflow 报错:ImportError: No module named 'pkg_resources'

    命令行运行 python -c “import mlflow” 的时候报错: ImportError: No module named 'pkg_resources' 结果发现是因为本地有一个文件夹叫 ...

  7. 群用户通过微信小程序可以更好地协作了

    今天,小程序向开发者开放了群ID的接口能力.简单地说,就是当你把小程序分享在群聊中,被点击后开发者可获取群ID和群名称,也方便更好地针对群场景提供个性化服务.不同的群有各自的群ID,那么这个新能力开发 ...

  8. 使用客户端等远程连接mysql数据库

    1:  远程数据库(D1)数据: 数据库用户:root,数据库密码:root,数据库ip 内网地址  192.168.100.91,数据库端口 3306 本地主机:ip  192.168.127.1 ...

  9. 使用对象作为hashMap的键,需要覆盖hashcode和equals方法

    1:HashMap可以存放键值对,如果要以对象(自己创建的类等)作为键,实际上是以对象的散列值(以hashCode方法计算得到)作为键.hashCode计算的hash值默认是对象的地址值. 这样就会忽 ...

  10. [adt]python实现栈-体验数据结构

    经常使用py的一些数据结构,如list,及list的一些方法. 还有hash表等. 各类数据结构方法用的很6,然而不知道是底层是怎么实现的. 基于此,就开始研究一下py实现一些数据结构, 以便于对计算 ...