C语言基础

#DEFINE 定义的常量是编译器常量
C99之前的C没有bool类型
const修饰的变量不能修改
整数表示方法: 八进制以 0 开头 ;十六进制以 0x 开头
补码数值表示方法:正数为原码本身,负数为 该数的绝对值的原码按位取反 然后加1
变量由变量名和变量值组成:变量名是一个符号地址,编译器在链接是为每一个变量名分配一个内存地址
ANSI标准中的int占用2个字节,但是VC中的int占用4字节
小数在计算机内存的表示结构为: |符号位(0 1 )| + |指数位(科学计数法的指数,也可以是负数,表示为小于0的小数)| +|有效数字|
字符在内存中存储的ASCII编码值
字符串就是以 ''结尾的的多个字符
隐式转换的顺序是:1、char —— int —— long —— double  2、float —— double

C语言运算符优先级

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

--

()

圆括号

(表达式)/函数名(形参表)

--

.

成员选择(对象)

对象.成员名

--

->

成员选择(指针)

对象指针->成员名

--

 

2

-

负号运算符

-表达式

右到左

单目运算符

~

按位取反运算符

~表达式

++

自增运算符

++变量名/变量名++

--

自减运算符

--变量名/变量名--

*

取值运算符

*指针变量

&

取地址运算符

&变量名

!

逻辑非运算符

!表达式

(类型)

强制类型转换

(数据类型)表达式

--

sizeof

长度运算符

sizeof(表达式)

--

 

3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

%

余数(取模)

整型表达式%整型表达式

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

5

<<

左移

变量<<表达式

左到右

双目运算符

>>

右移

变量>>表达式

 

6

>

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

<

小于

表达式<表达式

<=

小于等于

表达式<=表达式

7

==

等于

表达式==表达式

左到右

双目运算符

=

不等于

表达式!= 表达式

 

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

 

13

?:

条件运算符

表达式1?

表达式2: 表达式3

右到左

三目运算符

 

14

=

赋值运算符

变量=表达式

右到左

--

/=

除后赋值

变量/=表达式

--

*=

乘后赋值

变量*=表达式

--

%=

取模后赋值

变量%=表达式

--

+=

加后赋值

变量+=表达式

--

-=

减后赋值

变量-=表达式

--

<<=

左移后赋值

变量<<=表达式

--

>>=

右移后赋值

变量>>=表达式

--

&=

按位与后赋值

变量&=表达式

--

^=

按位异或后赋值

变量^=表达式

--

|=

按位或后赋值

变量|=表达式

--

 

15

逗号运算符

表达式,表达式,…

左到右

--

说明:

    同一优先级的运算符,运算次序由结合方向所决定。
    简单记就是:! > 算术运算符 > 关系运算符 > && > || >
赋值运算符

     对于长表达式,可以通过添加括号()来增加理解

 

++i 的意思是:在使用i之前,先使i的值加 1
i++ 的意思是:在使用i之后,使i的值加 1
 
C语言的类型结构:
  1. 基本类型
    1. 整形
    2. 字符型
    3. 小数
    4. 枚举
  2. 构造类型
    1. 数组
    2. 结构体
    3. 共用体
  3. 指针
  4. 空类型
 
数组是同一种类型的多个变量的组合。
申明和初始化定义的方式如下:
  1. int a[10]={0,1,2,3,4,5,6,7,8,9}   完全初始化
  2. int a[10]={0,1,2,3}   部分初始化  其他元素为0
  3. int a[10]={1}  初始化为同一个值
  4. int a[]={0,1,2,3,4}  不用指定大小
表达式 char c[]={"I love lili"}  定义了一个长度为12的字符数组,其中最后一个元素c[11]=''
 
结构体的声明:
struct student
{
     int age;
     char sex;
     char name[20];
};
定义 struct student student1,student2;
或者
struct student
{
     int age;
     char sex;
     char name[20];
}student1,student2;
在定义结构体时务必要注意数据对其对性能的影响

共用体与结构体的声明定义方式相似,只是将struct换成union就可以了。共用体占用的内存数等于最大成员变量的大小。在一瞬间只能存放其中的一种成员。
 
定义枚举 enum weekday{SUN,MON,TUE,WED,THU,FRI,STA}day;
 
变量的指针就是变量的地址
只能将变量的地址赋值给指针
 
int i;               变量
int *point_i;     指针
i=10;
point_i = &i;
 
int dummy(){}  空函数 :等以后扩充函数功能时补充上
 
声明函数的时候可以不用写形参
在函数内部定义的变量就是局部变量
在函数外部定义的变量就是全局变量
 
static 是静态变量,在函数内部申明,但是函数执行完毕后,不会释放。
如果没有初值,编译时会自动赋值为0或者空字符。
register 将变量放在寄存器中
extern 使得其他的文件能够访问的变量,不用包含.h文件??
 
static void print()  静态函数:只能被本文件中的其他函数所调用
extern void eat() 外部函数其他文件可以调用
 
#define WIFE char *name[]={"lili"}
宏定义就是字符串缩写,在编译的时候将缩写替换为原句
#undef 取消宏定义
 
#ifdef 标识符
     程序段1
#else
     程序段2
#endif
 
原文地址:https://www.cnblogs.com/pavkoo/p/3460117.html