» C语言快速入门 » 1. 基础篇 » 1.3 复合类型

复合类型

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 来确定各种数据类型(intfloatdoublechar)的(内存占用)大小。

注意:不可以使用 sizeof 运算符。

Loading...
> 此处输出代码运行结果
上页
下页