数据存储
基本数据类型
- 整数:
整形 int
短整型 short int
长整型 long int - 浮点数:
单精度浮点数 float
双精度浮点数 double - 字符:
单个字符 char - 复合数据类型
结构体
枚举
[变量
- 变量的本质就是内存中的一段存储空间
- 变量必须初始化(赋值),如果不赋值最终输出为填充字(垃圾值)。
进制
int i = 17;
printf("i = %d\n",i);
//%d表示以十进制输出
//%x表示以十六进制输出
//%o表示以八进制输出
字节
字节是存储数据的单位,并且是硬件所能访问的最小单位。(1字节=8bit, 1K=1024字节,1M =1024K,1G=1024M)
ASCII码
不是一个值,而是一种规定,规定不同的字符是使用哪个整数值去表示。eg : ‘A’–65,’B’–66
char ch = 'A';//OK
char ch = 'B';//error,ch被重复定义
ch = 'B';//OK,把B赋值给ch
常量
- 整数:
十进制:17
八进制:017(数字0)
十六进制:0x17 或 0X17 - 浮点数:
传统写法:3.2
科学计数法:3.2e3(值为3200),1234.5e-2(值为12.345) - 字符:
单个字符:‘a’
字符串: “aa”注: “a”是正确的,因为”a”表示’a’和’\0’的组合
- 存储方式
字符:’A’先转为ASCII码,再转换为补码(本质上与整数存储方式相同)
整数:以补码形式转换为二进制代码存储在计算机中
实数:以IEEE754标准转换为二进制代码存储在计算机中
强制数据类型转换
格式:(数据类型)(表达式)
功能:把表达式的值强制转换为前面所执行的数据类型
(int) (4.5+2.2);//最终值为6
(float)(5);//最终值为5.000000
结构体
为什么需要结构体
为了表示一些复杂的事物,而普通的基本类型无法满足实际要求
什么叫结构体
把一些基本数据类型组合在一起形成的一个新的复合数据类型
如何定义结构体
//第一种方式(推荐使用)
struct Student{
int age;
float score;
char sex;
};
//第二种方式
struct Student2{
int age;
float score;
char sex;
} student2;//定义一个名为student2的结构体
//第三种方式
struct {
int age;
float score;
char sex;
} student1;
int main(void){
struct Student student = {80,66.6,'F'};//初始化一个名为student的结构体
}
怎样使用结构体变量
赋值和初始化
struct Student{
int age;
float score;
char sex;
};
int main(void){
struct Student student = {80,66.6,'F'};//初始化,定义的同时赋初值
struct Student student2;//定义完后再赋值
student2.age = 10;
student2.score = 90;
student2.sex = 'F';
return 0;
}
怎样访问结构体变量中的每一个成员
结构体变量名.成员名
指针变量名->成员名
struct Student{ int age; float score; char sex; }; int main(void){ struct Student student = {80,66.6,'F'};//初始化,定义的同时赋初值 student.age = 10;//第一种方式 struct Student *pst = &student;//第二种方式 pst->age = 10;//pst所指向的结构体的age成员 return 0; }
注:pst->age会在计算机内部转化成(* pst).age
结构变量的运算
结构体变量不能相加、相减,也不能相互乘除,只能赋值
struct Student student1,student2;
student1 = student2;
#### 结构变量和结构体变量指针作为函数参数传递问题
//error,不能直接对结构体进行修改
void InputStudent1(st){
st.age = 10;
strcpy(st.name,"张三");//不能写成stu.name=“张三”,涉及C语言字符串处理
}
//OK
void InputStudent2(struct Student * pstu){
pstu->age = 10;
strcpy(pstu->name,"张三");
pstu->sex = 'F';
}
void OutputStudent(struct Student ss){
printf("%d %s %c\n".ss.age,ss.name,ss.sex);
}
int main(void){
struct Student student1;
InputStudent(st);//error,对结构体变量输入
InputStudent2(&st);//OK
OutputStudent(st);//对结构体变量输出,也可以传指针
return 0;
}
注:对结构体进行修改必须输入结构体的指针