码迷,mamicode.com
首页 > 编程语言 > 详细

C语言细节总结笔记

时间:2016-07-20 11:49:16      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:

C语言细节总结笔记

C语言细节总结笔记

1 三步异或法交换数字

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

2 按n位置位

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

3 求余求商求积

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

4 辗除法求最大公约数

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

5 求数组元素个数方法

sizeof(a)/sizeof(a1)

6 运算符优先级

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

7 scanf处理字符串

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

8 指针题

  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

9 int const *p问题

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

10 数组和指针

指针与一维数组 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是常量

11 字符数组

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

12 二维数组

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的首地址 组的首地址

13 数组指针

  • 一维 int b4={1,2,3,4} int (*p)4; p=&b; *(*p+1)=b5;
  • 二维

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.

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

Author: 野书

Created: 2016-07-20 三 11:22

Emacs 24.5.1 (Org mode 8.2.10)

C语言细节总结笔记

标签:

原文地址:http://www.cnblogs.com/wild-book/p/5687644.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!