C语言笔记

//大学C语言教材

C语言区分大小写;关键字和基本语句必须小写;

C语言的标识符:
类型标识符:int  char float  double long  short unsigned  struct union  enum auto  void extern  register static  typedef
控制标识符:goto  return continue  break if  else  for do  while switch  default
预处理标识符:define  include undef  ifdef  endif
其它标识符:sizeof volatile

整型常数:除了正负号之外,以0开头为8进制数,以0x开头为16进制数,其它为10进制数;
一般微机的字长为16位,则:
整型-----------int--------------16位;
短整型---------short int--------16位;(与整型相同)
长整型---------long int---------32位;
无符号整型-----unsigned int-----16位;
无符号短整型---unsigned short---16位;
无符号长整型---unsigned long----32位;

实型常数:又称浮点数,有一定的有效数字位数;(有效数字定义:从左边第一个非0的数字起向右到最后一个数字)
写法如下:
小数写法:0.325     -325.0
指数写法:3.25e-1   -3.25e2
单精度(float):占用32位空间,含7位有效数字;
双精度(double):占用64位空间,含15-16位有效数字;

转义字符常量:
\\代表\;  \'代表';  \n代表换行;\t代表横向跳格(8列);
\v代表竖向跳格;\b代表退格;\r代表回车; \f代表走纸换页;
\ddd代表由3位8进制ASCII码对应的字符;
\xhh代表由2位16进制ASCII码对应的字符;
字符常量占用8位空间;

算术运算符:+加法;-减法;*乘法;/除法;%求余;
关系运算符:〈小于;〈=小于等于;〉大于;〉=大于等于;==等于;!=不等于;
逻辑运算符:&&逻辑与;||逻辑或;!逻辑非;
位运算符:&按位与;|按位或;^按位异或;~按位反;〈〈左移;〉〉右移;

运算符的优先级:括号---〉逻辑非---〉算术运算---〉关系运算---〉逻辑与,逻辑或---〉赋值运算;
位运算符的优先级:~按位反---〉〈〈左移,〉〉右移---〉&按位与---〉^按位异或---〉|按位或;

ASCII码表和运算符的优先级可参考书中附录;

赋值运算的类型转换:

源类型

目标类型

说明

实型

整型

舍弃小数

字符型

实型

有效位补0

字符型

整型

保存ASCII码数值,同时把ASCII码的最高位作为/不作为符号位

整型

长整型

不变

无符号整型

长整型

不变

无符号类型

同长度类型

不变

非无符号类型

同长度无符号类型

不变

输入/输出函数中格式控制字符的使用格式:%[附加符][域宽][控制符],其中,%是强调字符

格式控制字符中的空格,制表符(\t),或换行符(\n)没有意义。

格式控制符和附加符:

控制符

说明

附加符

说明

%d

有符号十进制整数

l

长整型

%o

八进制整数

h

短整型

%x

16进制整数

m(正整数)

数据最小宽度

%c

字符

*

空读一位数据

%s

字符串

n(正整数)

n位小数位数或截取n位字符

%f

小数形式的实数

-(负号)

左对齐

%e

指数形式的实数

%u

无符号十进制

%g

选取较短的形式(%f或%e)

%%

输出百分号

指针就是各种变量的内存地址;指针变量就是*后面的字符,它的值是指针;

局部变量和全局变量的区别:函数内/函数前;全局变量可用extern在函数中声明,以提前使用;

动态变量和静态变量的区别:用完释放/保持;动态变量一般是函数内定义的局部变量,声明的关键字auto一般省略,另一种关键字register用于速度较高的应用;静态变量既可作局部变量,也可作全局变量,声明关键字为static;

内部函数:用static声明,其他源文件无法调用;反之,用extern声明(或者不声明),则其他源文件可以调用,是外部函数;调用外部函数时,必须先用extern声明才能使用;

 ===================================

结构体指针:

(*p1).name与p1->name等价。

p1++代表指向结构体数组中的下一组。

==================

结构体作为函数参数时,函数的定义形式如下:

void print(s)

struct student s;

{...}

调用时,print(结构体例化名)。

==================

结构体指针作为函数参数时,函数定义如下:

update(struct tm *p1)

{...}

调用时,update(&结构体例化名)。

==================

malloc,calloc,free函数-----含于stdlib.h

malloc函数:在内存中分配一个长度为size的连续空间,返回值是该空间起始地址,失败返回0.

void * malloc(unsigned int size);//返回的指针应做强制类型转换。

calloc函数:在内存中分配N个长度为SIZE的连续空间,其余同malloc函数。

void * calloc(unsigned int n,unsigned int size);

free函数:释放最近一次指向的内存空间

void free(void * ptr);

链表基本单元--含有指向自身指针的结构体。例如:

struct student{

long num;

struct student * next;

}

通过malloc函数申请结构体空间,并给next指针赋值,实现链表。

==================

返回值为结构体指针的函数定义:

struct student * creat()//函数名为creat

{struct student *head;

...

return(head);

}

==================

位段---以结构体方式定义的位数据,节省空间。结构体中几个变量的长度总和不超过16位宽。

变量必须用int,unsigned或signed声明。

struct student

{unsigned x:1;//1位宽必须用unsigned定义,因为1位不可能带符号

int y:2;//2位宽度

float pay;//其它变量,可共存于该结构体内

}s0;

先定义的变量处在低位,前述只有3位宽。

通过s0.x和s0.y来访问位段变量。

==================

共用体union---与结构体用法类似,但其各个成员共用一个存储空间。用于代表一个可能是各种类型的变量。

也就是说,空间每次只能分配给一个成员使用,就是最后一次赋值的那个成员变量占用。而且每次只能给一个成员赋值,不能同时赋值。

由于空间共用,给其中某个变量赋值后,也就意味着其它变量也有了一个值。

存储空间的大小按照占用最大的成员空间分配。

==================

预处理:宏定义,文件包含,条件编译;

宏定义:

#define,#undef

例如:#define PI 3.14

main{...}

#undef//PI的宏定义到此结束

----------------------

带参数的宏定义:类似于函数调用,但实际是替换

如#define X(a,b) a*b

则y=X(3,4)就是y=3*4;

-----------------------

条件编译:减少编译量和目标程序大小,不符合条件的语句不被编译。

#ifdef 标识符

程序段1

#else

程序段2

#endif

(如果“标识符”被定义过,则执行程序段1,否则执行程序段2)

---------------------

#ifdef 标识符

程序段

#endif

-------------------------

#ifndef标识符...#else...#endif

#if 表达式或标识符

程序段1

#else

程序段2

#endif(当表达式或标识符为真,执行程序段1)

==================

::作用域运算符,例如,::a,代表引用全局变量a。类名::函数名,代表类的成员函数。

inline---声明内联函数,用于提高函数执行速度,但更费空间。该函数需定义在main之前。

例如:

inline float add(float a,float b)

{float vol;

vol = a+b;

return vol;

}

没有inline声明的函数默认为外联函数。

另外,在类内实现的函数为内联函数。在类外实现的函数(也是该类成员)为外联函数,除非该外联函数用inline声明,则才视为内联函数。

==================

new和delete函数:用于取代malloc和free函数,更灵活。

例如:

new float;

new int(100);//1个Int型的空间,初始化值是100

new int[5][4];

申请什么类型,就返回什么类型的指针,失败返回NULL;

delete ptr;//根据new返回的指针ptr,释放空间。

注意:new和delete是运算符,不是函数,因此执行效率更高。

====================

友员--不是该类的成员函数,但在该类中用friend声明的函数。用于访问该类对象的私有和保护成员。在main中可以直接调用友员函数。

派生类与基类;

单一继承与多重继承;

公有派生;-------成员属性不变

私有派生;-------公变私,保护变私,私还是私

保护派生;-------公变保护,保护还是保护,私还是私

举例:

class A{};

class B{};

class C:public A,private B{};

类C从A和B派生而来,多重继承,对A是公有派生,对B是私有派生。

=============================

virtual--声明类中的函数为虚拟函数,在继承类中默认还是虚拟函数,可以做相同函数声明。但这时继承类和父类的函数功能可以不同,也就是同名函数功能不同。继承类之间也是如此。这就是多态性。

也就是说,父类定义了虚拟函数,则允许子类实现同名函数的新功能。

在子类中声明的虚拟函数,对父类无效,不能反向传递。

=============================

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值