C语言细节总结笔记

*/-->

C语言细节总结笔记

1 三步异或法交换数字

a ^= b;
b ^= a;
a ^= b;

2 做差法交换数字

x=x+y;
y=x-y;
x=x-y;

3 按n位置位

先置0
a&=~(1<<n)
再置1/0,i为1或0
a|=(i<<n)

4 求余求商求积

求余
a&=7 a%=8
求商
a>>=3 a/=8
求积
a<<=3 a*=8
a=(a<<3)+a a*=9

5 辗除法求最大公约数

while(b!=0)/*利用辗除法,直到b为0为止*/
  {
   temp=a%b;
   a=b;
   b=temp;
  }
printf("公约数:%d\n",a);

6 求数组元素个数方法

sizeof(a)/sizeof(a1)

7 运算符优先级

优先级 运算符 结合性
1 () [] . -> 从左到右
2 -(符号) ~ ++ – *(指针) & ! (类型) sizeof 从右向左
3 * / % 从左向右
4 +(加) -(减) 从左到右
5 从左向右
6 < <= > >= 从左向右
7 = ! 从左到右
8 &(安位与) 从左到右
9 ^ 从左到右
10 按位或 从左到右
11 && 从左到右
12 逻辑或 从左到右
13 ?: 从右到左
14 = += -= *= /= %= &= 从右到左
  &= ^= ~= = >>>=  
15 ,(逗号) 自左到右

8 scanf处理字符串

scanf("%[\n]",str);
用到正则表达式

9 指针题

  1. 指针的加减法:
    char a = 100;
    char *p = &a;
    若:p的地址为0x20008000,则
    p+1=0x______; 0x20008001
    *p + 1 =0x_____; 101(我写的是10进制)
    (int )p + 1 = 0x______; 0x20008001
    (int *)p + 1 = 0x______; 0x20008004
    (char *)p + 1 = 0x______; 0x20008001
    (char)p + 1 = 0x______; 1
  2. a &a &a+1
    char a2;
    a :=a1
    &a :=a1 本质发生变化 数组地址 现象如下
    &a+1 :=a2
  3. 指针
    (*p)++
    ++(*p)
    *(p)
    *p
    \\
    *(p++)
  4. 设有二维数组
    int a3, 4= {0, 1, 2, 3,4, 5, 6, 7, 8, 9, 10, 11};
    请说明以下表示形式的的含义:
    并写出地址值,设a的起始地址为0x2000.
    a表示 二维数组名,那么 a==&a1

    1. *a = __; 答:0x2000
      =a1=&a1, 1
    2. a + 1, &a5 表示____的首地址 a5
      (&a5 == a+1)
    3. a5, * (a+1) 表示的是元素_____的地址。 a5, 1
      &a5, 1==a5==*(a+1)
    4. *(a5 + 2), *(*(a+1) +2), 和a5, 6的关系?
      *(a5+2) == *(*(a+1)+2)==a5, 6
  5. 数组 int a3, 4, 请用3-4种方法表示a5, 6的地址?
    a1+1*4+2 0行开始 1
    *a+1*4+2 2
    &a5, 6 1行开始 3
    *(1)+2 4
    a5+2 5
    *(a+2)-2 2行开始 6
    a6-2 7
    *(*(&a+1))-6 3行开始 8
    *(*(&a+1)-1)-2 末尾开始 9

10 int const *p问题

const int *p 定义指向const的指针(指针指向的内容不能被修改)
int const p 定义指向const的指针(指针指向的内容不能被修改)
int
const p 定义const指针(由于指针本身的值不能改变所以必须得初始化)
const int* const p 指针本身和它指向的内容都是不能被改变的所以也得到初始化
int const* const p 指针本身和它指向的内容都是不能被改变的所以也得到初始化

11 数组和指针

指针与一维数组
int a4={0};

  • 数组名:数组第一个元素的地址
    a=&a1
    a+1=&a5
    a+i=&a[i]
  • 数组地址:表示一整个数组占的空间的首地址
    &a :
    &a+1 : +16个字节
  • [] : 变址运算符
    a[i] <==> *(a+i);
    int *p=a; //int *p = &a1; ==> int *p = &(*(a+0))

    p+1 = &a5
    p+i = &a[i]

    a[i] = p[i] = *(a+i) == *(p+i)

    p++; //a5;
    a++; //报错,因为a是常量

12 字符数组

char *p = "Hello World!"; //它存储在只读存储区,不能修改,如果修改会出现段错误

13 二维数组

a1==&a1, 1
a==&a1==&&a1, 1
a5, 5==*(&a5, 1+1) = *(a[1]+1) = *(*(a+1)+1)

  • a3, 4

    1 3 5 7
    9 11 13 15
    17 19 21 23

    & & &
    &a <= a <= a1 <= a1, 1
    数组 数组元数
    +1 +1 +1 +1

=a的末尾地址 =a5 =a1, 5 =a1, 1+1=2
指的是二维数 a5的首地址
组的首地址

14 数组指针

  • 一维
    int b4={1,2,3,4}
    int (*p)4;
    p=&b;
    *(*p+1)=b5;
  • 二维
    二维数组的指针本质是一维指针数组

15 指针数组

16 指针函数

17 函数指针

18 函数指针数组

int (p3)() //函数指针数组 返回值是int
int *(*arr7)() //函数指针数组 返回值是int
\\
int (*p(int))(int)
指针函数的返回值 指向一个返回值为int
的函数

19 存储方式

data段:初始化的全局变量和静态变量
bss段 :未初始化的全局变量和静态变量, 自动清零
代码段:常量 代码
堆:用户分配,用户回收
栈:系统分配,局部变量

20 typedef

  • typedef int NUM8
    MUM a ; // int a8
  • typedef char * STRING;
    STRING p, STRING a2;
  • typedef int (*pFun)(int,int,int)
    pFun p, q; <=> int(*p)(int, int, int)

Footnotes:

1

DEFINITION NOT FOUND.

2

DEFINITION NOT FOUND.

3

DEFINITION NOT FOUND.

4

DEFINITION NOT FOUND.

5

DEFINITION NOT FOUND.

6

DEFINITION NOT FOUND.

7

DEFINITION NOT FOUND.

8

DEFINITION NOT FOUND.

Date: a date, fixed, of a format string for format-time-string

Author: 野书

Created: 2016-07-24 日 15:50

Emacs 24.5.1 (Org mode 8.2.10)

C语言细节总结笔记的更多相关文章

  1. C语言细节——献给入门者(三)

    C语言细节——献给入门者(三) >>主题:关于强制类型转换 先来瞎扯下强制类型转换,c语言有很多数据类型,long,short,int,float,double,bool,char等等.当 ...

  2. C语言细节——献给初学者(二)

    C语言细节——献给初学者(二) 主题  循环运用+选择判断 C语言循环有for和while/do...while: 选择判断有:if...else和switch...case 在循环中需要注意搭配br ...

  3. C语言细节——献给入门者(一)

    C语言细节——献给入门者(一) 主题  输入输出需要注意的细节 首先我们要知道大致有scanf(),printf(),getchar(),putchar(),gets(),puts()这几种输入方式. ...

  4. # C语言假期学习笔记——6

    C语言假期学习笔记--6 数组 主要学习了一位数组和二维数组. 数组是一组具有相同类型的变量的集合.C语言程序通过元素的下标来访问数组中的元素.(下标从0开始) 一位数组 类型 数组名[元素个数] 二 ...

  5. R语言可视化学习笔记之添加p-value和显著性标记

    R语言可视化学习笔记之添加p-value和显著性标记 http://www.jianshu.com/p/b7274afff14f?from=timeline   上篇文章中提了一下如何通过ggpubr ...

  6. 二级C语言真题笔记

    二级C语言真题笔记 1. 知识重点:数据类型.循环.数组.函数.指针.结构体与共同体 2. 求程序的运行结果 #include <stdio.h> main() {     short i ...

  7. [转载] C语言细节,写的非常棒!

    这篇文章主要讨论C语言细节问题.在找一份工作的时候,语言细节占的比例非常小,之前看某个贴着讨论,估计语言细节在面试中,占了10%的比重都不到,那为什么还要研究C语言的细节呢,我觉得有三个原因促使我总结 ...

  8. C/C++编程笔记:C语言入门知识点(三),请收藏C语言最全笔记!

    今天我们继续来学习C语言的入门知识点,第一课:C/C++编程笔记:C语言入门知识点(二),请收藏C语言最全笔记! 21. 输入 & 输出 当我们提到输入时,这意味着要向程序填充一些数据.输入可 ...

  9. C语言细节笔记2

    C语言常见问题笔记:    1. 指针的声明     char * p1, p2;  p1 是一个指向char类型的指针,而p2是一个char类型变量  这是由于 * 并不是基本类型的一部分,而是包含 ...

随机推荐

  1. 使用appium做安卓手机web自动化测试 真机demo

    一:appium相关环境搭建过程略. 二:连接真机: 1.手机(andriod 4.2.2)连接电脑,打开USB调试模式. 2.运行cmd 输入 adb devices -l 查看UDID,如图: 3 ...

  2. DNS(一)简介

    最近学习相关DNS知识,顺便总结下相关内容. 1.什么是DNS DNS(Domain Name System)服务,可以使用域名代替复杂的IP地址来访问网络服务器,使得网络服务的访问更加简单,而且可以 ...

  3. 【原】Storm调度器

    Storm入门教程 1. Storm基础 Storm Storm主要特点 Storm基本概念 Storm调度器 Pluggable scheduler(可插拔调度器) Isolation schedu ...

  4. STM32L152 Keil 开发环境 显示Internal command error Flash down

    使用Keil开发环境对STM32L Discovery进行开发,更新一次firmware后就不能连接目标板了,报错Internal command error Flash download faile ...

  5. windows内核窥探

    windows是一个非常优秀的OS,从今天开始,我要和大家共同分享windows给我们带来的快乐!本人只所以将自己的学习笔记与大家分享,一是让自己更深入的理解windows,再就是有什么疏漏之处,望大 ...

  6. 题解西电OJ (Problem 1006 - 转盘游戏)--动态规划

    题目链接 : http://acm.xidian.edu.cn/land/problem/detail?problem_id=1006 Description wm最近喜欢上一种无聊的转盘解锁游戏,他 ...

  7. POJ1185 - 炮兵阵地(状态压缩DP)

    题目大意 中文的..直接搬过来... 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平 ...

  8. Ubuntu 14.04.3 LTS 配置 DNS Server

    我们目的是用一台局域网机器完成 192.168.1.113 <-->cloudshield.com的解析,指定A记录和CNAME; 0.关于Ubuntu 14.04.2 LTS 下载.安装 ...

  9. hdoj 2122 Ice_cream’s world III

    并查集+最小生成树 Ice_cream’s world III Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  10. Modbus Poll master-slave测试 Dtech USB转485(worldsing 笔记)

    1,简介 网站地址:http://www.modbustools.com/ 该网站提供了几个软件工具,可以运行于windows 2000/XP/Vista/7环境下,用来测试和仿真Modebus设备. ...