c语言知识点复习
1.
结构体的赋值
struct _STNODE{
int iNO;
}stNode;
stNode node1={123};
2. 当结构体作为形参的时候,注意传进去的只是克隆,要传指针才可以改变该结构体实例数据
3.优先级 运算符的
注意:
. 优先于 *
4.union
点表示法
typedf union {
int iNO;
double dNO;
float fNO;
}quanity;
quanity q={.iNO=4};
quanity q={4};//保存在第一个字段
5.枚举类型数据
enum {
RED,GREEN,YELLOW,BLACK
};
6.位字段*
bitfield!
typedef struct {
unsigned int choice_2:1;
unsigned int choice_4:2;
unsigned int choice_8:3;
unsigned int choice_16:4;
}synth;
7.
typedef struct stNode{
int iNO;
struct stNode *next;//在递归结构中!
}stNode;
8. main define scanf printf 都不是关键字
9.预定义标识符:背诵define scanf printf include。记住预定义标识符可以做为用户标识符
10.运行时候,所有的进制都要转换成二进制来进行处理
11.逗号表达式:
优先级别最低。表达式的数值逗号最右边的那个表达式的数值。
(2,3,4)的表达式的数值就是4
z=(2,3,4)(整个是赋值表达式) 这个时候z的值为4。(有点难度哦!)
12.注释不是C语言,不占运行时间,没有分号。不可以嵌套!
13.强制类型转换:
一定是 (int)a 不是 int(a),注意类型上一定有括号的。
注意(int)(a+b) 和(int)a+b 的区别。 前是把a+b转型,后是把a转型再加b。
14. '0' 的ASCII数值表示为48,
'a' 的ASCII数值是97,
'A'的ASCII数值是65。
15.
转义字符:
转义字符分为一般转义字符、八进制转义字符、十六进制转义字符。
一般转义字符:背诵\0、 \n、 \’、 \”、 \\。
八进制转义字符: ‘\141’ 是合法的, 前导的0是不能写的。
十六进制转义字符:’\x6d’ 才是合法的,前导的0不能写,并且x是小写。
int a=0123;//以0开始 8进制
int b=0x123;//十六进制
int c=123;//十进制
printf("%d",a);//83 64+16+3
16.!在没有舍去数据的时候,<<左移一位表示乘以2;>>右移一位表示除以2
17.格式说明
表示内容 格式说明 表示内容
%d 整型 int
%c 字符 char
%ld 长整型 long int
%s 字符串
%f 浮点型 float
%o 八进制
%lf double
%#o 带前导的八进制
%% 输出一个百分号
%x 十六进制
%5d
%#x 带前导的十六进制
18.如何实现保留三位小数,第四位四舍五入的程序,(要求背下来)
y=(int)(x*100+0.5)/100.0 这个保留两位,对第三位四舍五入
y=(int)(x*1000+0.5)/1000.0 这个保留三位,对第四位四舍五入
y=(int)(x*10000+0.5)/10000.0 这个保留四位,对第五位四舍五
19.while循环
int k=1 ;
while(k--) printf("k-- %d\n",k);//0; 执行一次 : 先传k (1),之后k--(0),进入循环体 --》 再传k (0),k-- 不行!end! -1
printf("k end 1 %d\n",k);//-1;
k=1 ;
while(--k) printf("--k %d\n",k);//0;
printf("k end 2 %d\n",k);//0;
20.for循环
int i=0;
for(;i<0;i++) ;
printf("\n%d\n",i);//0 先比较看是否满足条件;之后进入循环体;之后执行for()里第三步;再比较不满足退出;
for(;i<3;i++)
{
if(i==2) break;
}
printf("%d",i);//2
for(i=0;i<3;i++);
printf("%d",i);//3
===
1.函数声明
一定要有:函数名,函数的返回类型,函数的参数类型。不一定要有:形参的名称
2. *p++是 地址会变化。 口诀:取当前值,然后再移动地址!
3. *p:一级指针:存放变量的地址。
**q:二级指针:存放一级指针的地址。
4.函数返回值是地址,一定注意这个*号
int *fun(int *a,int *b)
5. a[2] 变成 *(a+2) a[2][3]变成 *(a+2)[3]再可以变成 *(*(a+2)+3) *(a[2]+3)
6.define f(x)(x*x) 和 define f(x) x*x 之间的差别。
一定要好好的注意这写容易错的地方,替换的时候有括号和没有括号是很大的区别。
f(3+3)
(3+3*3+3)
6*6
7.
int *p;
p = (int *)malloc(4);
p = (int *)malloc(sizeof(int));以上两个等价
当心填空题目,malloc的返回类型是 void *
8. 函数指针的用法(*f)()记住一个例子:
int add(int x, int y){
return x+y;
}
int minus(int x)
{
return -x;
}
int main()
{
int (*f)();
//int (*f)(int ,int);//也可以!
f=add;//赋值!
//3种调用方式!
printf("%d\n",add(1,2));
printf("%d\n",f(3,2));
f=minus;
printf("%d\n",(*f)(3));
return 0;
}
9.链表中的节点是有两个域,一个放数值,一个放指针。
10.
static int x;默认值为0。
int x:默认值为不定值。