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. qtp不识别树结构中的点击事件

    qtp不识别树结构中的点击事件,未生成该点击事件的脚本,解决办法: 1.未生成点击"auto分类c1"的脚本 2.点击1.对象库-2.添加对象库-3.选中对象-点击OK,即将该对象 ...

  2. Puppet学习:pp文件权限问题

    由于内网的Puppet还是在测试中,所以对文件权限等内容未做过多关注. 今天报了错误: Error: Could not retrieve catalog from remote server: Er ...

  3. codeforces 354 DIV2

    B - Pyramid of Glasses n层杯子,问k分钟能流满多少个杯子?和到香槟一样的过程? 思路:应为水的流速为每分钟一立方体(YY),可以做个转化,把最上层的杯子最原始的容积看成K,每个 ...

  4. [转]常用的130个vim命令

    原帖地址:http://www.oschina.net/news/43167/130-essential-vim-commands 从 1970 年开始,vi 和 vim 就成为了程序员最喜爱的文本编 ...

  5. maven 名词

    maven 坐标: 坐标 其实就是 通过几种不同的元素描述来找到其对应的构件. maven 定义坐标的元素有: 1. groupId : 定义当前maven 项目隶属的实际项目,一般是域名的反向写法 ...

  6. swift 内存管理,WEAK 和 UNOWNED

    因为 Playground 本身会持有所有声明在其中的东西,因此本节中的示例代码需要在 Xcode 项目环境中运行.在 Playground 中可能无法得到正确的结果. 不管在什么语言里,内存管理的内 ...

  7. pyinstaller打包第一个wxPython程序HelloWorld

    pyinstaller 打包hello 7Mb ================= www.pyinstaller.org pip install pypiwin32 pip install pyin ...

  8. Android v4 包和v7包问题

    昨天新建了一个android项目,加入了一个bootstrap的外部依赖和一个底部导航栏的外部依赖.结果jj 了,老是提醒我v4包v7包冲突: 事实是这样的,首先我的底部导航依赖库里面有一个v4包,那 ...

  9. 对get_baserel_parampathinfo函数的学习

    /* * get_baserel_parampathinfo * Get the ParamPathInfo for a parameterized path for a base relation, ...

  10. VS项目如何运用svn的忽略列表

    在实际的项目开发中,有些文件(比如bin,obj下的文件)是不需要放在svn里面的,因为每次都会重新生成. 该如何排除这些文件那? 我试着在svn server上删除了这些文件夹,但是在文件夹上还是显 ...