登錄 |創建賬號 |找回密碼
查看: 99|回復: 0

c语言定义一个键值对的数组

[複製鏈接]

23

主題

6

回帖

128

積分

管理員

Rank: 9Rank: 9Rank: 9

積分
128
發表於 2024-3-24 20:14:58 | 顯示全部樓層 |閱讀模式
在C语言中,由于没有内置的键值对数据结构,实现这样的功能需要手动构造。一个常见的做法是定义一个结构体来表示键值对,然后创建这种结构体的数组。考虑到键(Key)通常是字符串,而值(Value)可能是多种不同的类型,可以通过使用联合(union)和枚举(enum)来处理不同类型的值。这种方式提供了一定程度的类型安全性,并能较好地模拟键值对的概念。
下面是一个简单的示例,展示如何定义一个支持整数和字符串两种类型值的键值对数组:
定义键值对结构体
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>

  4. // 用于区分value的实际类型
  5. typedef enum {
  6.     INT,
  7.     STRING
  8. } ValueType;

  9. // 用于存储value的实际数据
  10. typedef union {
  11.     int intValue;
  12.     char* stringValue;
  13. } Value;

  14. // 键值对结构体
  15. typedef struct {
  16.     char* key;
  17.     ValueType type;
  18.     Value value;
  19. } KeyValuePair;

  20. // 功能函数声明
  21. void printKeyValuePair(const KeyValuePair* pair);

  22. int main() {
  23.     // 创建并初始化键值对数组
  24.     KeyValuePair pairs[2];

  25.     pairs[0].key = "age";
  26.     pairs[0].type = INT;
  27.     pairs[0].value.intValue = 58;

  28.     pairs[1].key = "name";
  29.     pairs[1].type = STRING;
  30.     pairs[1].value.stringValue = "张三";

  31.     // 打印键值对
  32.     for (int i = 0; i < 2; ++i) {
  33.         printKeyValuePair(&pairs[i]);
  34.     }

  35.     return 0;
  36. }

  37. // 打印键值对的函数
  38. void printKeyValuePair(const KeyValuePair* pair) {
  39.     printf("%s => ", pair->key);
  40.     if (pair->type == INT) {
  41.         printf("%d\n", pair->value.intValue);
  42.     } else if (pair->type == STRING) {
  43.         printf("%s\n", pair->value.stringValue);
  44.     }
  45. }
複製代碼
这个示例中,ValueType枚举用于指示value联合中存储的数据类型,Value联合能够存储一个整数或一个字符串指针,KeyValuePair结构体包含了键、值的类型以及值本身。printKeyValuePair函数根据值的类型来决定如何打印该值。
请注意,在实际使用中,如果字符串是动态分配的,则需要管理这些字符串的内存,包括分配和释放内存。在这个示例中,字符串是字面量,因此不需要动态分配内存。


回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 創建賬號

本版積分規則

Archiver|手機版|小黑屋|九派社區 ( 苏ICP备07501547号-12 )

GMT+8, 2024-5-16 21:41 , Processed in 0.086253 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回復 返回頂部 返回列表