在本章中,我们将深入探讨C语言中的各种数据类型。这些数据类型定义了变量能够存储的数据种类以及它们所占的内存空间。了解数据类型对于编写高效、准确的代码至关重要。
基本数据类型
整型
整型数据类型用于表示整数值。C语言提供了多种整型数据类型,每种类型占用的内存空间不同,所能表示的范围也不同。
char
char 类型通常用于表示字符,但它也可以用于表示小范围的整数。char 类型通常占用一个字节(8位),其取值范围通常是 -128 到 127 或者 0 到 255,这取决于编译器和平台。
#include <stdio.h>
int main() {
char ch = 'A';
printf("字符 %c 的ASCII码是 %d\n", ch, ch);
return 0;
}short
short 类型用于表示短整型整数,它占用两个字节(16位)。其取值范围通常是 -32768 到 32767。
#include <stdio.h>
int main() {
short num = 1234;
printf("short 类型的值为 %hd\n", num);
return 0;
}int
int 类型是最常用的整型数据类型,它通常占用四个字节(32位)。其取值范围通常是 -2147483648 到 2147483647。
#include <stdio.h>
int main() {
int num = 123456789;
printf("int 类型的值为 %d\n", num);
return 0;
}long
long 类型用于表示长整型整数,它通常占用四个字节(32位)或八个字节(64位),具体取决于编译器和平台。其取值范围通常是 -2147483648 到 2147483647(32位)或更宽(64位)。
#include <stdio.h>
int main() {
long num = 1234567890123456789L; // 注意后缀L
printf("long 类型的值为 %ld\n", num);
return 0;
}long long
long long 类型用于表示更长的整型整数,它通常占用八个字节(64位)。其取值范围通常是 -9223372036854775808 到 9223372036854775807。
#include <stdio.h>
int main() {
long long num = 1234567890123456789LL; // 注意后缀LL
printf("long long 类型的值为 %lld\n", num);
return 0;
}浮点型
浮点型数据类型用于表示带有小数部分的数值。C语言提供了两种浮点型数据类型:float 和 double。
float
float 类型用于表示单精度浮点数,它通常占用四个字节(32位)。其有效数字约为6到7位。
#include <stdio.h>
int main() {
float num = 3.14159f; // 注意后缀f
printf("float 类型的值为 %f\n", num);
return 0;
}double
double 类型用于表示双精度浮点数,它通常占用八个字节(64位)。其有效数字约为15位。
#include <stdio.h>
int main() {
double num = 3.141592653589793238;
printf("double 类型的值为 %lf\n", num);
return 0;
}枚举类型
枚举类型用于定义一组命名的整数常量。枚举类型的定义通常包括一系列枚举常量。
// www.javascriptcn.com code example
#include <stdio.h>
enum Color { RED, GREEN, BLUE }; // 默认从0开始
int main() {
enum Color myColor = GREEN;
printf("myColor 的值为 %d\n", myColor);
return 0;
}无符号整型
无符号整型数据类型用于表示非负整数。它们的定义方式与对应的有符号整型类似,但使用关键字 unsigned。
unsigned char
unsigned char 类型用于表示非负整数,其取值范围通常是 0 到 255。
#include <stdio.h>
int main() {
unsigned char num = 255;
printf("unsigned char 类型的值为 %u\n", num);
return 0;
}unsigned short
unsigned short 类型用于表示非负短整型整数,其取值范围通常是 0 到 65535。
#include <stdio.h>
int main() {
unsigned short num = 65535;
printf("unsigned short 类型的值为 %hu\n", num);
return 0;
}unsigned int
unsigned int 类型用于表示非负整型整数,其取值范围通常是 0 到 4294967295。
#include <stdio.h>
int main() {
unsigned int num = 4294967295U; // 注意后缀U
printf("unsigned int 类型的值为 %u\n", num);
return 0;
}unsigned long
unsigned long 类型用于表示非负长整型整数,其取值范围通常是 0 到 4294967295(32位)或更宽(64位)。
#include <stdio.h>
int main() {
unsigned long num = 4294967295UL; // 注意后缀UL
printf("unsigned long 类型的值为 %lu\n", num);
return 0;
}unsigned long long
unsigned long long 类型用于表示非负更长的整型整数,其取值范围通常是 0 到 18446744073709551615。
#include <stdio.h>
int main() {
unsigned long long num = 18446744073709551615ULL; // 注意后缀ULL
printf("unsigned long long 类型的值为 %llu\n", num);
return 0;
}派生数据类型
派生数据类型是通过组合基本数据类型创建的。
数组
数组是一种可以存储相同类型元素的集合。
// www.javascriptcn.com code example
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
printf("arr[%d] = %d\n", i, arr[i]);
}
return 0;
}结构体
结构体是一种用户自定义的数据类型,可以包含不同类型的数据成员。
// www.javascriptcn.com code example
#include <stdio.h>
struct Person {
char name[50];
int age;
};
int main() {
struct Person person = {"Alice", 30};
printf("Name: %s, Age: %d\n", person.name, person.age);
return 0;
}联合体
联合体是一种特殊的结构体,其中所有成员共享同一块内存空间。
// www.javascriptcn.com code example
#include <stdio.h>
union Data {
int i;
float f;
char str[20];
};
int main() {
union Data data;
data.i = 10;
printf("data.i: %d\n", data.i);
data.f = 220.5;
printf("data.f: %f\n", data.f);
strcpy(data.str, "Hello");
printf("data.str: %s\n", data.str);
return 0;
}指针
指针是一种存储内存地址的数据类型。
// www.javascriptcn.com code example
#include <stdio.h>
int main() {
int num = 10;
int *ptr = #
printf("num 的值为 %d\n", num);
printf("num 的地址为 %p\n", &num);
printf("ptr 指向的值为 %d\n", *ptr);
printf("ptr 的值为 %p\n", ptr);
return 0;
}类型别名
类型别名是给现有的数据类型起一个新的名字。
使用 typedef
// www.javascriptcn.com code example
#include <stdio.h>
typedef unsigned int uint;
int main() {
uint age = 25;
printf("年龄为 %u\n", age);
return 0;
}使用 #define
// www.javascriptcn.com code example
#include <stdio.h>
#define UINT unsigned int
int main() {
UINT age = 25;
printf("年龄为 %u\n", age);
return 0;
}以上是C语言中关于数据类型的详细讲解。通过掌握这些基础知识,你将能够更好地理解如何在程序中合理地选择和使用不同的数据类型。