位运算
// 按位与&: 2 & 3 = 2; 010 & 011 = 010   两个1才为1
// 按位或|: 2 | 3 = 3; 010 | 011 = 011   只要1个为1则为1
// 按拉异或: 2 ^ 3 = 1;  010 | 011 = 001   不同则为1
 
// 结合律:(a & b) & c = a & (b & c)
// 交换律: a & b  = b & a
 
/****************左移和右移注意点:****************\
  左移运算符 <<                                 
     规则: 高位丢弃,低位补0                   
  右移运算符 >>                                 
     规则: 高位补符号位,低位丢弃              
 
/*********************防错准则*********************\
 避免位运算符,逻辑运算符和数学运算符同时出现在一个
 表达式中。(位运算优先级低于加减法运算)         
 需要同时参与运算时,尽量使用()来表达计算效仿次序
 
// 小技巧:
// 左移n位相当于乘以2的n次方
// 右移n位相当于除以2的n次方
// 位运算效率比数学运算高。
 
#define SWAP3(a, b) \
{                   \
    a = a ^ b;      \
    b = a ^ b;      \
    a = a ^ b;      \
}
// 交换
// a = (a ^ b)
// b = (a ^ b) ^ b = a ^ (b ^ b) = a ^ 0 = a;
// a = a ^ (a ^ b) = (a ^ a) ^ b = b;
 

 
条件编译
/**********************************************\
 通过编译器命令行能够定义预处理器使用的宏     
 条件编译可以避免重复包含同一个头文件         
 条件编译是在工程开发中可以区别不同产品线的代码
 条件编译可以定义产品的发布版和调试版      
 

sizeof
 sizeof是编译器的内置指示符,不是函数
 sizoof用于“计算”相应实体所占的内存大小
 sizeof的值在编译期就已经确定

const
const修饰的变量是只读的,其本质还是变量
const修饰的变量会在内存占用空间
本质上const只对编译器有用,在运行时无用
 
  const int* p;         // p可变,p指向的内容不可变
  int const* p;         // p可变,p指向的内容不可变
  int* const p;         // p不可变,p指向的内容可变
  const int* const p;   // p和p指向的内容不可变
 
  口诀: 左数右指
  当const出现在*号左边 时指针指向的数据为常量
  当const出现在*号后边时指针本身为常量
 
* const修饰函数参数表示在函数体内不希望改变参数的值
* const修饰函数返回值表示返回值不可改变,多用于返回指针的情形
 

 
volatile
 
 可理解为“编译器指示字”
 volatile用于告诉编译器必须每次去内存中取变量值
 volatile主要修饰可能被多个线程访问的变量
 volatile也可以修饰可能被未知因素更改的变量
 
    int obj = 0;
    int a = 0;
    int b = 0;
 
    a = obj;
    sleep(100);
    b = obj;
    // 编译器在编译的时候发现obj没有被当成左值使用
    // 因此会“聪明”的直接将obj替换成10
    // 把a和b都直接赋值为10.
 
    // 可能出现的问题:在sleep(100)的时间内
    // 如果obj由于其它因素被修改,b的值被赋值为10。   
 
    // 解决方法:在obj之前加上volatile
 

 
union
 
struct中的每个域在内存中都独立分配空间
 union只分配最大域空间,所有域共享这个空间
 
 union的使用受系统大小端的影响(可通过union判断系统大小端)
 
int checkSys()
{
    union check
    {
        int i;
        char c;
    } cc;
    cc.i = 1;
    return cc.c == 1;  // 若等于1,则系统为小端模式,否则为大端模式
}
 

typedef
 
 typedef用于给一个已经存在的数据类型重命名
 typedef并没有产生新的类型
 typedef重定义的类型不能进行unsigned和signed扩展
 
typedef和#define的区别 :
typedef是给已有类型取别名              
#define为简单的字符串替换,无别名的概念 
 

enum
  enum是一种自定义类型
  enum默认常量在前一个值的基础上依次加1
  enum类型的变量只能取定义时的离散值
 
***********************枚举类型和#define的区别***********************
 #define宏常量只是简单的进行值替换, 枚举常量才是真 正意义上的常量                                    
 #define宏常量无法被调试,枚举常量可以             
 #define宏常量无类型信息,枚举常量一种特定类型的常量
 

 
单引号和双引号
 
 本质上单引号括起来的一个字符代表整数
 双引号括起来的字符代表一个指针
 C编译器接受字符和字符串的比较,可意义是错误的
 C编译器允许字符串对字符变量赋值,其意义是可笑的。
 

 
 

 
 

一些C语言基础知识的更多相关文章

  1. OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  2. 李洪强iOS开发之OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  3. Golang 入门系列(三)Go语言基础知识汇总

    前面已经了 Go 环境的配置和初学Go时,容易遇到的坑,大家可以请查看前面的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html ...

  4. ios开发学习笔记001-C语言基础知识

    先来学习一下C语言基础知识,总结如下: 在xcode下编写代码. 1.编写代码 2.编译:cc –c 文件名.c 编译成功会生成一个 .o的目标文件 3.链接:把目标文件.o和系统自带的库合并在一起, ...

  5. C语言基础知识-数组和字符串

    C语言基础知识-数组和字符串 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组概述 在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来的方式我们称为数组 ...

  6. C语言基础知识-程序流程结构

    C语言基础知识-程序流程结构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.概述 C语言支持最基本的三种程序运行结构:顺序结构,选择结构,循环结构. 顺序结构:程序按顺序执行, ...

  7. C语言基础知识-运算符与表达式

    C语言基础知识-运算符与表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用运算符分类 1>.算术运算符 用于处理四则运算. 2>.赋值运算符 用于将表达式的 ...

  8. C语言基础知识-数据类型

    C语言基础知识-数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常量与变量 1>.关键字 C的关键字共有32个. >.数据类型关键字(12个) char,s ...

  9. 重拾C语言基础知识

    从实习到工作两年多的时间了,虽然感觉学到了很多知识,但是事实上却将立足之本的基础知识给忘了个精光.也许跟自己没有出去找工作有关,没有好好的将C语言的基础牢牢掌握. 从现在开始吧!好好的重温基础,做一名 ...

  10. ZYNQ笔记(0):C语言基础知识复习

    ZYNQ的SDK是用C语言进行开发的,C语言可以说是当今理工类大学生的必备技能.我本科学C语言时就是对付考试而已,导致现在学ZYNQ是一脸懵逼.现在特开一帖,整理一下C语言的基础知识. 一.定义 1. ...

随机推荐

  1. python3.6+selenium3.13 自动化测试项目实战一

    自己亲自写的第一个小项目,学了几天写出来的一个小模块,可能还不是很完美,但是还算可以了,初学者看看还是很有用的,代码注释不是很多,有问题可以加我QQ 281754043 一.项目介绍 目的: 测试某官 ...

  2. apache环境下ssl证书链不完整问题解决,原因是缺少中间证书

    事情的起因是,对一个网站的升级,从http升级到https,苹果手机可以正常访问,唯独安卓手机出现空白,安卓访问https的时候是出现的空白. 服务器的系统是windows Server 2008 R ...

  3. @EnableFeignClients 注解

    feignClents在spring容器里找不到的原因 当使用的feignClents 来自引用别的工程时,需要指定包名,如果不指定就算使用ComponentScan 扫描也不行 import org ...

  4. day 24 面向对象之继承及属性查找顺序

    组合 组合:自定义类的对象作为另外一个类的属性 class Teacher: def init(self, name, age): self.name = name self.age = age t1 ...

  5. df、du命令

     EXT3  最多只能支持32TB的文件系统和2TB的文件,实际只能容纳2TB的文件系统和16GB的文件 Ext3目前只支持32000个子目录 Ext3文件系统使用32位空间记录块数量和i-节点数量 ...

  6. 如何将div高度填满剩余高度

    下列代码中navbar高度为30px,content高度需要填满浏览器的剩余高度 <div id="body">     <div id="navbar ...

  7. 借助FreeHttp任意篡改http报文 (使用·实现)

    引言 FreeHttp是一个Fiddler插件借助FreeHttp您可按照您自己的设定修改请求或响应报文,这对测试及调试都非常有用 比如您发现线上页面js文件错误,直接使用规则替换新的js文件您可以在 ...

  8. 如何在FineUIMvc(ASP.NET MVC)中显示复杂的表格列数据(列表和对象)?

    起源 最初,这个问题是知识星球内的一个网友提出的,如何在FineUIMvc中展现复杂的列数据? 在FineUIPro中,我们都知道有一个 TemplateField 模板列可以使用,我们只需要在后台定 ...

  9. MacOS10.14下Eclipse安装lombok

    按照网上的教程来做,会导致eclipse启动不了,这里记录一下解决方案: 一.复制lombok.jar到../Eclipse/下 二.修改eclipse.ini,在末尾追加: -Xbootclassp ...

  10. “理了么”软件特点NABCD个人分析

    在这里我就主要对此软件的‘A’(做法)和‘B’(好处)两方面进行分析. “A”:我们的软件为顾客和商家分别提供一种账户,分别登陆后会显示不同的界面. 1.用户界面:拥有“理发店”.“订单“.”和“我的 ...