C语言细节总结笔记
Table of Contents
1 三步异或法交换数字
a ^= b; b ^= a; a ^= b;
2 按n位置位
先置0 a&=~(1<<n) 再置1/0,i为1或0 a|=(i<<n)
4 辗除法求最大公约数
while(b!=0)/*利用辗除法,直到b为0为止*/ { temp=a%b; a=b; b=temp; } printf("公约数:%d\n",a);
5 求数组元素个数方法
sizeof(a)/sizeof(a1)
6 运算符优先级
7 scanf处理字符串
scanf("%[\n]",str); 用到正则表达式
8 指针题
- 指针的加减法: 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
- a &a &a+1 char a2; a :=a1 &a :=a1 本质发生变化 数组地址 现象如下 &a+1 :=a2
- 指针
(*p)++
++(*p)
*(
*(p++)p) *p - 设有二维数组 int a3, 4= {0, 1, 2, 3,4, 5, 6, 7, 8, 9, 10, 11}; 请说明以下表示形式的的含义: 并写出地址值,设a的起始地址为0x2000. a表示 二维数组名,那么 a==&a1
- 数组 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 数组和指针
11 字符数组
char *p = "Hello World!"; //它存储在只读存储区,不能修改,如果修改会出现段错误