1.变量和基本数据类型
1.1变量的概念
变量就是在程序中可以发生变化的量,变量有类型。 变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。 1字节=8位
1.2定义格式
存储类型 数据类型 变量名; 例如:(auto) int a; 变量名是标识符,要符合标识符命名规则。 存储类型:变量存储的位置。 数据类型包含:名字 字节 取值范围
图1 数据类型
1.3 初始化格式
(1)可以定义的时候初始化 int a=0; (2)先定义后初始化 int a; a=0;
1.4 局部变量和全局变量
(1)生命周期:变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。也就是存活的周期时间。时间维度。 (2)作用域:变量可以起作用的范围。空间维度。 (3)内存的五个区域:
图2 内存存储图
图3 局部变量与全局变量的区别
例子:
#include <stdio.h> int b; int main(int argc, const char *argv[]) { int a; printf("%d\n",a); printf("%d\n",b); return 0; }
另外还可以使用static来定义全局变量。
全局变量和全局静态变量的区别(即使用static与不使用static定义的全局变量区别)
1)全局变量是不显式用 static 修饰的全局变量,全局变量默认是有外部链接性的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过 extern 全局变量名的声明,就可以使用全局变量。
2)全局静态变量是显式用 static 修饰的全局变量,作用域是声明此变量所在的文件,其他的文件即使用 extern 声明也不能使用。
例子:
对应的运行结果:
2.常量
2.1概念
程序运行中不会发生变化的量叫常量,存放在常量区。
2.2分类
2.2.1 字符型常量
类型为char,从ascii表中找到的字符都是字符型常量,不可以改变。用单引号括起来的就是字符常量,例如‘A’。 类型 存储大小 值范围 char 字符类型 1 字节 -128 到 127 unsigned char 无符号字符类型 1 字节 0 到 255 signed char 带符号字符类型 1 字节 -128 到 127 原码、反码和补码: (1)最高位表示符号位,正数时0,负数是1。 (2)正数的原码、反码和补码都一样。 (3)负数要用补码来计算: ●原码就是直接在数值前面加上符号表示 ●反码等于原码的符号位不变,其他位按位取反 ●补码等于反码加一 例如:-5 原码:1000 0101 反码:1111 1010 补码:1111 1011
用''括起来的就是字符常量: 'a' 字符a '\0' 空字符 '\n' 换行
用法:
char c='b'; char a='\101'; printf("%c\n",'A'); printf("%c\n",65); printf("%c\n",'\x42'); printf("%c\n",c); printf("%c\n",a); printf("%c\n",a+32);
因为C规定转义字符'\x41'中\是转义字符引导符,后跟一个x表示x后面的数字是十六进制表示法,用' '括起来表示一字节ASCII码。\转义符后面加数字代表转义成八进制的字符,后面的数字是八进制。
2.2.2 字符串常量
用“”括起来的就是字符串,例如“hello”,字符串最后跟一个'\0'。 例如:
printf("%s\n","hello");
2.2.3 整型常量
整型常量就是类型为整数的常量,包括从负数到零到正数的所有整数。 可以用二进制、八进制、十进制和十六进制表示。
#include <stdio.h> int main(int argc, const char *argv[]) { int a=10;//把整型常量赋值给整型变量 printf("%d\n",a); printf("%d\n",10); //十进制 printf("%d\n",0b1111); //二进制 printf("%d\n",010); //八进制 printf("%d\n",0xF); //十六进制 return 0; }
2.2.4 浮点型常量
浮点型常量就是类型为浮点数的常量,包括从负数到零到正数的所有浮点数。 float double
2.2.5 指数常量
科学计数法表示 300000000=310^8==>3e8 0.0000012=1.210^-6==>1.2e-6 例子: float f=80000; printf("%e %e\n",0.0000012,f);
2.2.6 标识常量(宏定义)
宏定义:起到标识作用 (1)只是单纯的文本替换,在预处理的时候进行的 (2)遵循标识符命名规则 (3)一般用大写标识
格式: #define 宏名 常量或表达式 特点:单纯的文本替换,不能手动运算(原样替换) 例子1:
#include <stdio.h> #define ONE 1 #define TWO ONE+ONE #define THREE ONE+TWO int main(int argc, const char *argv[]) { printf("%d\n",THREE);
return 0;
}
如果一个串长于一行,可在行尾用反斜线”\”续行
例子2:
#define N 2 #define M N+3 //M 2+3 #define NUM N+M/2+1 //2+2+3/2+1=6 void main() { int a = NUM;
printf("%d\n",a); }