C - 数据类型
你好,未来的程序员们!欢迎加入我们激动人心的C编程世界之旅。今天,我们将探索C语言中迷人的数据类型领域。如果你是编程新手,不用担心;我将作为你的友好向导,我们会一步一步地解决这个问题。所以,拿起你最喜欢的饮料,舒服地坐下来,让我们一起深入研究!
C语言中的整数数据类型
让我们从我们都熟悉的东西开始 - 整数。在C语言中,我们称这些为整数,它们有不同的尺寸和类型。
基本整数类型
下面是C语言中最常见的整数类型的表格:
数据类型 | 大小(字节) | 范围 |
---|---|---|
char | 1 | -128 到 127 或 0 到 255 |
short | 2 | -32,768 到 32,767 |
int | 4 | -2,147,483,648 到 2,147,483,647 |
long | 4 或 8 | -2,147,483,648 到 2,147,483,647 或 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
现在,让我们看看它们的实际应用:
#include <stdio.h>
int main() {
char my_char = 65;
short my_short = 32000;
int my_int = 2000000000;
long my_long = 9000000000L;
printf("char: %c\n", my_char);
printf("short: %d\n", my_short);
printf("int: %d\n", my_int);
printf("long: %ld\n", my_long);
return 0;
}
当你运行这段代码时,你会看到:
char: A
short: 32000
int: 2000000000
long: 9000000000
让我们来分解一下:
-
char
值 65 对应于ASCII表中的 'A'。惊喜!char
也可以存储数字! -
short
和int
对于中等大小的数字来说工作如预期。 - 对于
long
,我们在末尾加上 'L' 来告诉C这是一个长数字。
无符号整数
有时,我们只需要正数。这时无符号整数就派上用场了:
unsigned char my_uchar = 255;
unsigned short my_ushort = 65000;
unsigned int my_uint = 4000000000U;
printf("unsigned char: %u\n", my_uchar);
printf("unsigned short: %u\n", my_ushort);
printf("unsigned int: %u\n", my_uint);
输出:
unsigned char: 255
unsigned short: 65000
unsigned int: 4000000000
通过使用 unsigned
,我们可以在相同的内存空间中存储更大的正数。这就像魔法一样,但其实只是位操作的巧妙运用!
C语言中的浮点数据类型
现在,让我们进入小数的世界。C语言提供了三种浮点类型:
数据类型 | 大小(字节) | 精度 |
---|---|---|
float | 4 | 6-7位小数 |
double | 8 | 15-16位小数 |
long double | 16 | 19-20位小数 |
让我们看看它们的实际应用:
#include <stdio.h>
int main() {
float pi_float = 3.14159265358979323846f;
double pi_double = 3.14159265358979323846;
long double pi_long_double = 3.14159265358979323846L;
printf("float: %.7f\n", pi_float);
printf("double: %.16f\n", pi_double);
printf("long double: %.20Lf\n", pi_long_double);
return 0;
}
输出:
float: 3.1415927
double: 3.1415926535897931
long double: 3.14159265358979323846
注意到 float
在7位数字后丢失了精度,而 double
和 long double
维持了更多的准确性。这就像在数码照片上放大 - 在某个点上,你开始看到像素!
C语言中的用户定义数据类型
C语言允许我们创建自己的数据类型。就像厨师一样,创造自己的食谱!
结构体
结构体允许我们将相关的数据组合在一起:
#include <stdio.h>
#include <string.h>
struct Student {
char name[50];
int age;
float gpa;
};
int main() {
struct Student alice;
strcpy(alice.name, "Alice");
alice.age = 20;
alice.gpa = 3.8;
printf("Name: %s\n", alice.name);
printf("Age: %d\n", alice.age);
printf("GPA: %.1f\n", alice.gpa);
return 0;
}
输出:
Name: Alice
Age: 20
GPA: 3.8
在这里,我们创建了一个 Student
类型,将姓名、年龄和GPA捆绑在一起。就像为学生信息创建一个表格!
枚举
枚举非常适合创建一组命名常量:
#include <stdio.h>
enum Days {SUN, MON, TUE, WED, THU, FRI, SAT};
int main() {
enum Days today = WED;
printf("Today is day number %d\n", today);
return 0;
}
输出:
Today is day number 3
枚举自动从0开始为元素分配递增的整数值。就像给数字起昵称!
C语言中的void数据类型
void
是C语言中的一个特殊类型。它就像一块空白的画布 - 它表示数据的存在。我们主要在三种情况下使用它:
-
函数不返回任何值:
void sayHello() { printf("Hello, World!\n"); }
-
函数不接受任何参数:
int getRandomNumber(void) { return 4; // 通过公平的骰子滚动得到的随机数。保证是随机的。 }
-
通用指针(我们将在指针部分介绍)
C语言中的数组数据类型
数组就像一排鸽巢,每个都包含相同类型的值:
#include <stdio.h>
int main() {
int scores[5] = {85, 92, 78, 90, 88};
printf("First score: %d\n", scores[0]);
printf("Last score: %d\n", scores[4]);
float average = 0;
for(int i = 0; i < 5; i++) {
average += scores[i];
}
average /= 5;
printf("Average score: %.2f\n", average);
return 0;
}
输出:
First score: 85
Last score: 88
Average score: 86.60
记住,在C语言中,数组的索引从0开始。这就像欧洲的楼层 - 地面楼层是0!
C语言中的指针数据类型
指针就像指向内存位置的标志。它们很强大,但也可能有点棘手:
#include <stdio.h>
int main() {
int x = 10;
int *p = &x;
printf("Value of x: %d\n", x);
printf("Address of x: %p\n", (void*)&x);
printf("Value of p: %p\n", (void*)p);
printf("Value pointed by p: %d\n", *p);
*p = 20;
printf("New value of x: %d\n", x);
return 0;
}
输出(地址会有所不同):
Value of x: 10
Address of x: 0x7ffd5e8e3964
Value of p: 0x7ffd5e8e3964
Value pointed by p: 10
New value of x: 20
在这里,p
是一个指针,它存储了 x
的地址。我们可以使用 *p
来访问或修改该地址处的值。这就像对 x
有了一个遥控器!
就这样!我们已经涵盖了C语言中的主要数据类型。记住,理解数据类型对于帮助您高效管理内存和避免错误至关重要。继续练习,很快你就能像专业人士一样熟练地使用这些类型了!快乐编码!
Credits: Image by storyset