C预科总结

来源:互联网 发布:淘宝电脑改差评步骤 编辑:程序博客网 时间:2024/04/30 06:53

1.     gcc编译过程:预处理(-E、.i)/宏展开、条件编译、删除注视--- 编译(-S、.s) /生成汇编文件--- 汇编(-c、.o)/生成二进制文件 --- 链接 ()/与相关的库文件链接;

2.     数据类型:常量、变量(char 1  short 2 long/float/int 4 double 8 long double 12、布尔类型 boolsrdbool.h)关键字是ture falsevoid)、强制类型转换 (数据类型)表达式;其实char a;也是强制转换,低精度转高的是隐式类转换,高向低的是强制类型转换;

3.     字符串:‘x’与“x”不一样,“x”多了一个\0sizeof()是i计算空间内存,strlen()是计算字符长度,遇\0结束,所以不包括\0、%(h/l/ll)d,%o,%x,%c,%s(除空格以外的字符都是可以接受的)所以可用while((str=getchar())!=’\n’)来读取空格,%f,%p,%%(打印%本身);

int %d、short %hd、long %lld  、float %f 、double %lf 、long double %Lf

4.     表达式与语句的区别就是表达式+;就是语句;

5.     while(入口条件循环)/do…while(退出条件循环):while(experrssion) statement(可以花括号的复合语句),dostatement while(expression);二者的区别在于dowhile循环多一次;

6.     for(initialize;test;update)initialize只执行一次,test表达式求值,计算update表达式;

7.     if(expression) statement_a  else statement   (else与最近的if配对)还有一种是梯形if  

if(expression_a)  

statement_a ;

else if(expression_b)  

tatement_b ; 

else;   

tatement_x;

8.     switch:

 switch(expression(为整型,浮点型的不行))

{

           Case constant1(整型常量):

                      …..break;(看情况加,构成多重标签)

           Default:

                      ……break;

};

9.     break与continue的区别在于,continue只与循环结构匹配,break跟switch和循环体匹配,continue是结束本次循环,break是直接跳出当层循环,而return 是直接跳出函数;

10.     函数:声明(放在头文件附近)和定义(是有函数体的)、形参是声明是的参数,不占用空间,实参是调用时传入的参数、函数传参有赋值和地址传递两种;

11.     数组:是连续的储存空间,储存的类型一样,不检查越界、int date【10】={….}(right)定义完后date【10】={…}(error)这时的下标代表的是数组下标的数,如不初始化一定要【N】、数组名为数组的第一个元素的地址、对于多维数组,int date【】【3】若不初始化,则列一定要标数字、不够全部补零,一维数组的数组名是该数组的第一个元素的地址,&数组名是整个数组的地址,对于二维数组a+1是第一行的首地址,a[0]+1是a[0][1]的地址,所以a[i]+j是第i行j列的地址 a+i 是第i行的首地址,a+i取值(*(a+i))后是a[i];

12.      指针:const型的,constint*P 修饰int,int*constP 修饰指针、

int *p[10]指针数组(循环取首地址,输出为*p[0,1..]),int(*p)[10]数组指针(取首地址,(*p)[1,2…]),int(*p)(int)函数指针(直接取函数,函数名就是一个地址),

int *p(int)指针函数,int(*p[10])(int)由函数指针组成的数组

其实对于指针,只要是指针,

Int a     inta[10]      nt *p1     int function(int a)   

Int *p    int(*p)[10]   int *(*p)    int (*p)  (int a)

P=&a;  p=&a         p=&p1    p=&function

对于指针只是修饰的则 int *

13.      储存类,链接,内存管理

作用域  :C代码段作用域(一般),函数原型作用域(int a(int i)文件作用域 (全  局)

链接;外部(可在多文件程序的任何地方),内部(一个文件的任何地方(static)),空(只能自己私有)

存储时期:静态(程序运行一直存在),自动 (系统分配)

a.自动               autoint 存在stk中

b.寄存器                 registarint

b.空链接的静态           代码段之内    static

d,具有外部链接的静态     所有函数之外,全局

e.具有内部链接的静态      所有函数之外,static 存在数据段     

f.malloc分配的空间存在堆里 

int *p=NULL;

P=(int *)malloc (sizeof(int)*n);

*P=..;

不能p++;

Free(p);

14.         复杂声明,typedef是一种彻底的封装,声明之后不能在往里面添加东西、常用于简洁的指向其他东西的指针,typedef现有的数据类型 自定egtypedef  void(*sighandlert_t)(int)  sighandler_t signal(int sig,sighandler_t);

15.         结构体

#include<stdio.h>

#include<string.h>

struct Student//结构体定义

{

float score;

char name[12];

};//在没有实例化对象时不占用空间,设计数据完后与基本数据类型一样

typedef struct Student Student;//结构体别名定义

/*

typedef struct Student//结构体定义

{

float score;

char name[12];

}Student;//另外一种结构体别名定义(常用)

 

struct Student//结构体定义

{

float score;

char name[12];

}zhangsan,lisi;//另外一种结构体变量定义(常用)

 

struct

{

float score;

char name[12];

}zhangsan 

//省略结构体名(一般用于函数或结构体内部)

*/

int main()

{

Studentzhangsan={100,"zhangsan"};//={.name=zhangsan,.score=100}

//zhangsan={100,"zhangsan"}(error)

Student lisi;

lisi.score = 70;

strcpy(lisi.name,"lisi");//定义变量并且初始化

 

/*Student zwh;

printf("input name:");

scanf("%s",zwh.name);

printf("please input score:");

scanf("%f",&zwh.score);

printf("%s\n",zwh.name);

printf("%.1f\n",zwh.score);

return 0;

Student *p = &zhangsan;//结构体指针

printf("%.1f %s\n",zhangsan.score,p->name);//取数用点,指针用-*

return 0;*/

/*指针定义分配大小

Student *student = NULL;

student =(Student*)malloc(sizeof(Student));

if(student == NULL)

{

perrer("malloc:");

return -1;

}

student->score = 100;

strcpy(student->name,"zwh")

free(student);

*/

//结构体大小计算

struct strsize

{

char a;//4    m=4

int num[20];//4*20   m=4

char *p;//4    m=1

M=4;

//2对齐,4对齐,剩下可以进就进,不进就前面的不要了,重新分配,因为32CPU一次只能读写4个字节;

}s1;

printf("%d\n",sizeof(s1));//结构体内存算法如上

return 0;

共用体与结构体类似,空间不一样(成员互斥是使用)

16.枚举:enum 标签{}c   c只能去{}里的数,如果{}里的数不赋值,则按0123..排列下来//主要是把{}里的数给标识;

17.宏定义:

#define PI 3.14

/#define  MAX(x,y)({         \

             typeof(x) _x=x;\

             typeof(y) _y=y;\

             (void)(&_x (> == <)&_y);\\判断2个x和y的类型

             (_x)>(_y)?(_x):(_y);\

     })

宏知识代替,所以要避免自加的情况(x++),因为代替的时候,自加了2次;

18条件编译

#include<stdio.h>

int main()

{  

      #if 0

      #ifdef DEBUG//有定义宏出hello或者在编译时加-DDEBUG

           printf("hello\n");

      #endif

 

      #ifndefDEBUG//没有定义宏出hello或者在编译时加-DDEBUG

           printf("nhello\n");

      #endif

       

      #if A-19 //表达式真出来    用于注释

           printf("nnn\n")

      #endif

      #endif

      return 0;

}

0 0
原创粉丝点击