复合类型
C 有如下复合类型,如:
- 数组
- 结构体
- 联合体
- 枚举
- 字符串, 其实就是字符的数组
数组
数组是存储在连续内存中的项的集合。它可以通过索引随机访问元素。
int a[5];
int b[] = {0,1,2,3,4};
size_t len = sizeof(a) / sizeof(a[0]);
for(size_t i = 0; i < len; i++) {
a[i] = i;
}
printf("%d\n", a[2]);
字符串
在 C 中,字符串是 char 的数组,并以不可见 \0 字符结尾。
例如:
#include <stdio.h>
#include <string.h>
int main() {
// 字符串的声明和初始化
char greeting[] = "Hello, World!";
char *s = "Hi, Again!";
// 使用printf显示字符串
printf("String: %s\n", greeting);
printf("String: %s\n", s); // Output: Hi, Again!
// 计算并显示字符串的长度
int length = strlen(greeting);
printf("Length of the string: %d\n", length);
// 访问字符串中的单个字符
printf("First character: %c\n", greeting[0]); // Output: H
printf("Third character: %c\n", greeting[2]); // Output: l
// 修改字符串中的字符
greeting[7] = 'Y';
printf("Modified string: %s\n", greeting); // Output: Hello, Yorld!
return 0;
}
枚举
在 C 中,枚举是一种带有自定义名称的整数常量列表。枚举中的每个常量都有一个关联的整数值,这些值由编译器自动分配。
#include <stdio.h>
enum Color {
RED, // 0
GREEN, // 1
BLUE // 2
};
int main() {
enum Color favoriteColor = BLUE;
printf("Favorite color is %d\n", favoriteColor);
// Favorite color is 2
return 0;
}
结构体
在 C 中,结构体允许将不同类型的变量组合在一个名称下。它是由用户定义的数据存储对象,默认情况下所有字典成员都是公共可访问。
#include <stdio.h>
#include <string.h>
struct Person {
char name[50];
int age;
float height;
};
int main() {
struct Person person1;
strcpy(person1.name, "Lite Rank");
person1.age = 30;
person1.height = 175.5;
printf("Name: %s\n", person1.name);
// Name: Lite Rank
printf("Age: %d\n", person1.age);
printf("Height: %.2f\n", person1.height);
return 0;
}
联合体
联合体是一种特殊的数据类型,允许在相同的内存位置存储不同的数据类型。联合体的大小由最大成员的大小确定。 联合体使得在相同内存位置复用多个数据类型,实现多用途成为可能。
#include <stdio.h>
union Data {
int intValue;
float floatValue;
char stringValue[20];
};
int main() {
union Data data;
data.intValue = 42;
printf("Integer value: %d\n", data.intValue);
data.floatValue = 3.14;
printf("Float value: %.2f\n", data.floatValue);
strcpy(data.stringValue, "Hello, Union!");
printf("String value: %s\n", data.stringValue);
printf("After reassignment:\n");
printf("Integer value: %d\n", data.intValue);
printf("Float value: %.2f\n", data.floatValue);
printf("String value: %s\n", data.stringValue);
return 0;
}
代码挑战
编写一个 C 程序,使用
union来确定各种数据类型(int,float,double,char)的(内存占用)大小。注意:不可以使用
sizeof运算符。
Loading...
> 此处输出代码运行结果