C语言修炼之路数据类型悟正法 解析存储定风魔上篇攻略
引言
C语言是一门经典的程序设计语言,操作系统、驱动程序、嵌入式开发等领域都广泛应用。C语言数据类型悟正法是C语言学习中的重要环节,本攻略从数据类型的本质和存储特点入手,系统解析C语言数据类型,以期对C语言有更深入的理解和认识。
常见数据类型
C语言的数据类型包括基本数据类型和派生数据类型两类。
基本数据类型
基本数据类型是构成C语言计算机程序的基础,包括整型、字符型、浮点型、双精度实型和空类型等。在声明变量时,需要指定变量名和变量类型,例如:
int a; // 定义整型变量a
char b; // 定义字符型变量b
float c; // 定义单精度浮点型变量c
double d; // 定义双精度浮点型变量d
void e; // 定义空类型变量e
派生数据类型
派生数据类型是由基本数据类型加上一些修饰符所构成的数据类型,包括数组、指针、结构体和联合体等。派生数据类型的特殊性质在数据存储中的表现更为显著。
数组
数组是一种存储有序的、具有相同数据类型的元素的集合。在使用数组时需要指定数组名、数组类型和数组大小,例如:
int arr[4]; //定义一个int类型的数组,数组长度为4
int arr1[2][3]; //定义一个int类型的二维数组,有2行3列
指针
指针是一个变量,其存储的值为另一个变量的地址。通过指针可以间接访问该变量所在的存储单元。在使用指针时需要先定义指针变量,并进行地址赋值,例如:
int *p; //定义一个int类型的指针p
int a = 6;
p = &a; //p指向a的地址
结构体
结构体是一种用户自定义的数据类型,可以由若干个基本类型或派生类型组成的复合数据类型。在使用结构体时需要先定义结构体类型,并定义该类型的变量,例如:
struct Student { // 定义结构体类型
char name[20];
int age;
char gender;
int number;
};
struct Student stu1; // 定义结构体变量
联合体
联合体是一种用户自定义的数据类型,将多个不同类型的变量组合在一起,共用一块相同的内存空间。在使用联合体时需要先定义联合体类型,并定义该类型的变量,例如:
union MyUnion { //定义联合体类型
int a;
char b;
float c;
};
union MyUnion myUnion; //定义联合体变量
数据存储
对于不同的数据类型,其在计算机内存中的存储方式不同,不同的存储方式体现在数据的地址和数据的占用空间上。
内存地址
内存地址表示存储空间的位置,是由操作系统分配的整数值。在C语言中,可以使用指针变量存储数据的地址。不同的数据类型在内存中占用的存储空间不同,因此其所在的内存地址也不同。
存储空间
不同的数据类型在内存中占用的存储空间是不同的,不同的存储空间体现在不同的数据类型所能表示的最大值上。例如,int类型的数据可以表示的最大值是2147483647,而short类型的数据可以表示的最大值是32767。
示例说明
示例一
以下是一个使用结构体的案例,定义一个结构体类型Student,包含学生的姓名、年龄、性别和学号,然后定义一个该类型的结构体变量,并对其进行赋值。
#include <stdio.h>
#include <string.h>
struct Student {
char name[20];
int age;
char gender;
int number;
};
int main() {
struct Student stu;
strcpy(stu.name, "Tom");
stu.age = 18;
stu.gender = 'M';
stu.number = 20170001;
printf("Name:%s,Age:%d,Gender:%c,Number:%d\n", stu.name, stu.age, stu.gender, stu.number);
return 0;
}
输出结果为:
Name:Tom,Age:18,Gender:M,Number:20170001
示例二
以下是一个使用联合体的案例,定义一个联合体类型MyUnion,有三个成员变量a、b和c,分别是int型、char型和float型变量,然后定义一个该类型的联合体变量,并对其进行赋值。
#include <stdio.h>
union MyUnion {
int a;
char b;
float c;
};
int main() {
union MyUnion myUnion;
myUnion.a = 11;
printf("a=%d, b=%c, c=%f\n", myUnion.a, myUnion.b, myUnion.c);
myUnion.b = 'A';
printf("a=%d, b=%c, c=%f\n", myUnion.a, myUnion.b, myUnion.c);
myUnion.c = 1.23;
printf("a=%d, b=%c, c=%f\n", myUnion.a, myUnion.b, myUnion.c);
return 0;
}
输出结果为:
a=11, b=, c=0.000000
a=65, b=A, c=0.000000
a=1060320051, b=A, c=1.230000
从输出结果可以看出,联合体变量的三个成员变量共用一块内存空间,对其中一个成员变量的修改可能会影响到其他成员变量。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言修炼之路数据类型悟正法 解析存储定风魔上篇 - Python技术站