char //字符数据类型 1字节
short //短整型 2字节
int //整型 4字节
long //长整型 4字节
long long //更长的整型 8个字节
float //单精度浮点数 4字节
double //双精度浮点数 8字节
``注:`存在这么多类型为了更加丰富的表达生活中的值。
常量:
不可变的值。
变量:
变化的值
注:
当全局变量和局部变量同名的时候,局部变量优先使用。
定义变量:分两步:
1:开辟空间
int a;//内存空间就开辟好了
2: 写入对应的数据
a=100;
初始化:空间开辟好,里面的数据与生俱来是某个值
int a = 100; //初始化
赋值:第二次进行主动赋值
a = 200; //赋值
const修饰的变量定义被修饰的变量不能直接修改
宏定义:见名知义
#define MAX 100
enum Sex{
MALE,
FEMALE,
SECRET
};
注:
2. 字符串的结束标志是一个\0的转义字符。在计算字符串长度的时候\0是结束标志,不算做字符串的内容。
3. 字符串本身默认以’\0’结尾。
4. strlen():字符串的长度不包含反斜杠’\0’。
5. sizeof():字符串的大小包含反斜杠’\0’。
6. "\c"打印就只是c字符,sizeof求大小就是2。
+ - * %
>> <<
& ^ |
= += -= *= /= &= ^= >>= <<=
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作符的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置,后置--
++ 前置,后置++
* 间接访问操作符(解引用操作)
(类型) 强制类型转换
>
>=
<
<=
!= 用于测试不相等
== 用于测试相等
&& 逻辑与
|| 逻辑或
exp1 ? exp2 : exp3
[] () . ->
typedef是类型定义,即类型重命名。
//代码1
#include
void test()
{
int i=0;//每次调用函数都初始化
i++;
printf("%d",i);
}
//代码2
#include
void test(){
//static修饰局部变量
static int i = 0;//只初始化一次,之后调用函数跳过此句
i++;
printf("%d ", i);
}
int main(){
int i = 0;
for (i = 0; i < 10; i++){
test();
}
return 0;
}
作用域:在代码块有效,使用static有效作用域不改变
生命周期:临时性。static修饰的变量的生命周期是全局属性。
int i=0;//初始化,局部范围作用完释放,再次作用继续执行改代码进行初始化。
static int i=0;//初始化。任何一个变量都只会作用一次。第二次不会再执行此代码直接跳过。
修饰全局变量-静态全局变量:
一个局部变量呗static修饰,使得这个全局变量只能在本源文件内使用,不能再其他源文件内使用。
//代码1 运行正常
//add.c
int g_val=2018;
//test.c
#include
extern int g_val;
int main(){
printf("%d\n",g_val);
return 0;
}
//代码2 编译错误
//add.c
static int g_val=2018;
//test.c
#include
int main(){
printf("%d\n",g_val);
return 0;
}
修饰函数-静态函数:
一个函数被static修饰,使得这个函数只能在本源文件内使用,不能再其他源文件内使用。
第一种情况
//代码1
//add.c
int Add(int x,int y)
{
return x+y;
}
//test.c
#include
extern int add(int x,int y);//可有可无,函数声明默认是extern
int main()
{
printf("%d\n",add(2+3));
}
//代码2
//add.c
static int add(int x,int y)
{
return x+y;
}
//test.c
#include
int main()
{
printf("%d\n",add(2,3));
}
第二种情况
//代码1
//print.c
#include//这里加头文件因为printf()函数在stdio.h的库函数中
void show()
{
printf("Hello World!");
}
//test.c
#include
int main()
{
show();
}
extern int a;
在变量定义前加extern关键字表示声明一个变量但不定义它 。它表示"这只是一个声明,它的定义在别的地方",关键字extern,它表示变量是在文件以外定义的,或在文件后面部分才定义.
extern int func1(int length, int width);
这种声明方式和一般的func1()声明方式一样。因为没有函数体,编译器必定把它作为声明而不是函数定义。extern关键字对函数来说是多余的,可选的。C语言的设计者并不要求函数的声明使用extern,这可能有些令人遗憾;如果函数声明也要求使用extern,那么在形式上与变量声明更加一致,从而减少了混乱。
#define ADD(x,y) x+y
#include
int main(){
int sum = 0;
sum = 2 * ADD(3, 4);//只做替换,不做计算,替换完结合整个表达式运算
printf("sum=%d", sum);//输出是10不是14
return 0;
}
内存是电脑重要的存储器,计算机中所有的程序的运行都在内存中运行的。
为零有效的使用内存,把内存划分成一个小小的内存单元,每个内存单元的大小是1个字节。
为了能有效访问内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
#include
int main(){
System("pause");
}