c语言知识点复习

来源:互联网 发布:阿里布达年代祭百度云 编辑:程序博客网 时间:2024/06/06 11:37

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:默认值为不定值。








 
 
 

0 0