C基础概念

1.三字母词

三字母词使 c 环境可以在某些缺少一些必需字符的字符集上实现

三字母词对应的字符
??=#
??([
??)]
??<{
??>}
??/\
??!|
??'^
??-~

三字母词极少出现,有时也会有危险,如:

printf("Delete file (are you really sure ??):\n");

运行结果(在unix下需要加上 -trigraphs 参数来启用三元符)

Delete file (are you really sure ]:

2.转义字符

转义字符
意义
ASCII码值(十进制)
\a
响铃(BEL)
007
\b
退格(BS) ,将当前位置移到前一列
008
\f
换页(FF),将当前位置移到下页开头
012
\n
换行(LF) ,将当前位置移到下一行开头
010
\r
回车(CR) ,将当前位置移到本行开头
013
\t
水平制表(HT) (跳到下一个TAB位置)
009
\v
垂直制表(VT)
011
\\
代表一个反斜线字符''\'
092
\'
代表一个单引号(撇号)字符
039
\"
代表一个双引号字符
034
\0
空字符(NULL)
000
\ddd
1到3位八进制数所代表的任意字符
三位八进制
\xhh
1到2位十六进制所代表的任意字符
二位十六进制

3.标识符

关键字:(被保留的,不能作为标识符)

auto :声明自动变量
break:跳出当前循环
case:开关语句分支
char :声明字符型变量或函数
const :声明只读变量
continue:结束当前循环,开始下一轮循环
default:开关语句中的“其它”分支
do :循环语句的循环体
double :声明双精度变量或函数
else :条件语句否定分支(与 if 连用)
enum :声明枚举类型
extern:声明变量是在其它文件中声明
float:声明浮点型变量或函数
for:一种循环语句
goto:无条件跳转语句
if:条件语句
int: 声明整型变量或函数
long :声明长整型变量或函数
register:声明寄存器变量
return :子程序返回语句(可以带参数,也可不带参数)循环条件
short :声明短整型变量或函数
signed:声明有符号类型变量或函数
sizeof:计算数据类型长度
static :声明静态变量
struct:声明结构体变量或函数
switch :用于开关语句
typedef:用以给数据类型取别名
unsigned:声明无符号类型变量或函数
union:声明共用数据类型
void :声明函数无返回值或无参数,声明无类型指针
volatile:说明变量在程序执行中可被隐含地改变
while :循环语句的循环条件

标识符长度没有限制,但标准允许编译器忽略第31个字符以后的字符,标准同时允许编译器对用于

表示外部名字(也就是由链接器操纵的名字)的标识符进行限制,只识别前六位不区分大小写的字符。

4. 隐式声明

c语言中有几种声明,它的类型名可以省略。例如,函数如果不显式的声明返回值的类型,它就默认返回整型,但隐式声明不是一个好主意,尽量少用。

5. typedef

你应该使用 typedef 而不是 #define 来创建新的类型名,因为后者无法正确地处理指针类型。如:

#define pointers char *

pointers a, b;

正确的声明了 a ,但是 b 却被声明为一个字符。


6. 指针常量和常量指针

int a;
int * const p = &a    //指针常量,它是不可改变地址的指针,但是可以对它所指向的内容进行修改。
                      //*p可以修改 *p = 2;(OK)
                      //p不可以修改 p++;(ERROR)

int a,b;
const int *p = &a;(或 int const *p = &a)//常量指针,指向常量的指针,指针所指向的地址的内容是不可修改的 
                                          //*p不可修改 *p = 2;(ERROR)
                                          //p 可以修改 p = &b;(OK)
//另外:
const int * const p = &a; (或 int const * const p = &a)   // *p 和 p均不可改变


const 变量只能用于允许使用变量的地方,而 #define 只要允许使用字面值常量的地方都可以使用。


7. 链接属性

一共有三种: external(外部),internal(内部)和 none(无)。

没有链接属性的标识符(none)总是被当作单独的个体。

属于 internal 链接属性的标识符在同一个源文件内的所有声明中都指同一个实体,但位于不同源文件的多个声明则分属不同的实体。 (用 static 声明)

属于 external 链接属性的标识符无论声明多少次,位于几个源文件都表示同一个实体 。(用 extern 声明)


8. 存储类型

 在C语言中,供用户使用的存储空间分为三类:程序区、静态存储区、动态存储区。

         程序存放的是可执行程序的机器指令;

         静态存储区存放的是在程序运行过程中需要占用的固定存储单元的变量,如全局变量

         动态存储区存放的是在程序运行过程中根据需要动态分配内容空间的变量,如形式参数、局部变量

a.变量存储类型

 变量存储类型指的是数据在内存中存储的方式。变量的存储方式可以分为两类:静态存储类和动态存储类。具体包含4种:自动型(auto)、静态型(static)、寄存器型(register)和外部型(extern)

b. 局部变量的存方式

   局部变量有三种存储方式:自动型、静态型和寄存器型。

         自动变量

         静态变量

        寄存器变量

  自动变量:函数中的局部变量如不特别申明为static存储类型,都是动态地分配存储空间,数据存储在动态存储区。在调用函数时,系统会给数据分配存储空间,

  在函数调用结  束时就会释放这些存储空间。自动变量用关键字auto作为存储类别的申明,可以省略

  静态变量:自动变量在函数调用结束后其所占用的内存空间会被释放,有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,

  即其占用的内容空间不被释放,在下次调用时,该变量已有值,这时就可以声明局部变量为“静态局部变量”,用关键字“static”进行声明

  说明:局部静态变量是在静态存储区分配存储单元的,在整个程序运行期间都不释放;局部静态变量是在程序编译过程中被赋值的,且只赋值一次,

  在程序运行时其初值已经确定,以后每次调用函数时不再赋值,而是保留上一次函数调用结束时的值;初值为0(整型变量)或空字符(字符型变量);

  其它函数不能引用寄存器变量:C语言中允许将局部变量的值放在CPU中的寄存器中,需要时直接从寄存器中读取数据,不必再到内存中读取数据,

  这种变量称为寄存器变量,用关键字“register”声明

  说明:只有局部自动变量和形式参数可以作为寄存器值

c . 全局变量的存储方式

        外部全局变量

         静态全局变量

  全局变量在静态存储区中分配内存单元的,存储类型有两种:外部类型(extern)和静态类型(static)

  外部全局变量:全局变量是在函数的外部定义的,它的作用域是从变量的定义处开始到本程序文件的结束。如果在定义点之前的函数想要引用该变量,

  则应该在引用之前用关键字extern对该变量进行声明,声明该变量为外部全局变量

  说明:extern不能用来初始化变量,extern的作用是扩展全局变量的作用域,在系统编译遇到extern时,先在本文中寻找全局变量的定义,

   如果找不到,在链接时从其它文件中全局变量的定义.

  静态全局变量:在设计一个程序时,有时不希望某些全局变量被其它文件引用,这时可以用关键字static对全局变量进行声明

  说明:无论是否对全局变量进行static声明,全局变量均是静态存储方式,使用static声明的静态全局变量,在本文件中定义在全局变量之前的函数也是不能引用的



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值