首页 > 其他分享 >C 语言结构体和枚举完全指南:成员访问、字符串操作、枚举基础

C 语言结构体和枚举完全指南:成员访问、字符串操作、枚举基础

时间:2024-01-11 22:35:38浏览次数:30  
标签:指南 struct int s1 enum myVar 枚举 字符串

访问结构体成员

要访问结构体的成员,请使用点语法 (.):

// 创建名为 myStructure 的结构体
struct MyStructure {
  int myNum;
  char myLetter;
};

int main() {
  // 创建名为 s1 的 myStructure 的结构体变量
  struct MyStructure s1;

  // 为 s1 的成员分配值
  s1.myNum = 13;
  s1.myLetter = 'B';

  // 打印值
  printf("My number: %d\n", s1.myNum);
  printf("My letter: %c\n", s1.myLetter);

  return 0;
}

现在您可以使用只使用一个结构体,轻松创建多个具有不同值的结构体变量:

// 创建不同的结构体变量
struct MyStructure s1;
struct MyStructure s2;

// 为不同的结构体变量分配值
s1.myNum = 13;
s1.myLetter = 'B';

s2.myNum = 20;
s2.myLetter = 'C';

如何在结构体中使用字符串?

请记住,C 语言中的字符串实际上是字符数组,不幸的是,您无法像这样为数组分配值:

struct MyStructure {
  int myNum;
  char myLetter;
  char myString[30]; // 字符串
};

int main() {
  struct MyStructure s1;

  // 尝试为字符串分配值
  s1.myString = "Some text";

  // 尝试打印值
  printf("My string: %s", s1.myString);

  return 0;
}

会发生错误:

prog.c:12:15: error: assignment to expression with array type

但是,有一个解决办法!您可以使用 strcpy() 函数并将值分配给 s1.myString,如下所示:

struct MyStructure {
  int myNum;
  char myLetter;
  char myString[30]; // 字符串
};

int main() {
  struct MyStructure s1;

  // 使用 strcpy 函数为字符串分配值
  strcpy(s1.myString, "Some text");

  // 打印值
  printf("My string: %s", s1.myString);

  return 0;
}

结果:

My string: Some text

更简单的语法

您也可以在声明时为结构体变量的成员分配值,只需一行。

只需在花括号 {} 内插入一个以逗号分隔的列表中的值。请注意,您不必使用 strcpy() 函数来为字符串值使用此技术:

// 创建结构体
struct MyStructure {
  int myNum;
  char myLetter;
  char myString[30];
};

int main() {
  // 创建一个结构体变量并为其分配值
  struct MyStructure s1 = {13, 'B', "Some text"};

  // 打印值
  printf("%d %c %s", s1.myNum, s1.myLetter, s1.myString);

  return 0;
}

注意:插入的值的顺序必须与结构体中声明的变量类型的顺序一致(对于 int 为 13,对于 char 为 'B',等等)。

C 语言中的枚举 (enum)

枚举 (enum) 是一种特殊类型,用于表示一组常量(不可更改的值)。

要创建枚举,请使用 enum 关键字,后跟枚举的名称,并用逗号分隔枚举项:

enum Level {
  LOW,
  MEDIUM,
  HIGH
};

注意,最后一个项目不需要逗号。

使用大写字母不是必需的,但通常被认为是良好的实践。

Enum 是“enumerations”的缩写,意为“特别列出”。

要访问枚举,您必须创建一个变量。

在 main() 方法中,指定 enum 关键字,后跟枚举的名称 (Level) 和枚举变量的名称 (myVar):

enum Level myVar;

现在您已创建了一个枚举变量 (myVar),可以为其分配一个值。

分配的值必须是枚举中的项目之一 (LOW、MEDIUM 或 HIGH):

enum Level myVar = MEDIUM;

默认情况下,第一个项目 (LOW) 的值为 0,第二个 (MEDIUM) 的值为 1,依此类推。

如果现在尝试打印 myVar,它将输出 1,表示 MEDIUM:

int main() {
  // 创建一个枚举变量并为其分配一个值
  enum Level myVar = MEDIUM;

  // 打印枚举变量
  printf("%d", myVar);

  return 0;
}

更改值

如您所知,枚举的第一个项目的值为 0。 第二个值为 1,依此类推。

为了使值更易于理解,您可以轻松地更改它们:

enum Level {
  LOW = 25,
  MEDIUM = 50,
  HIGH = 75
};
printf("%d", myVar); // 现在输出 50

请注意,如果您为一个特定项目分配值,则下一个项目将相应地更新其编号:

enum Level {
  LOW = 5,
  MEDIUM, // 现在为 6
  HIGH // 现在为 7
};

枚举在 switch 语句中

枚举通常在 switch 语句中使用,以检查相应的值:

enum Level {
  LOW = 1,
  MEDIUM,
  HIGH
};

int main() {
  enum Level myVar = MEDIUM;

  switch (myVar) {
    case 1:
      printf("Low Level");
      break;
    case 2:
      printf("Medium level");
      break;
    case 3:
      printf("High level");
      break;
  }

  return 0;
}

为什么和何时使用枚举?

枚举用于为常量命名,这使代码更易于阅读和维护。

当您拥有不会改变的值时,例如月天、日、颜色、纸牌等等,请使用枚举。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注

标签:指南,struct,int,s1,enum,myVar,枚举,字符串
From: https://blog.51cto.com/xiaowange/9204429

相关文章

  • 2645. 构造有效字符串的最少插入数
    难度:中等给你一个字符串word,你可以向其中任何位置插入"a"、"b"或"c"任意次,返回使word有效需要插入的最少字母数。如果字符串可以由"abc"串联多次得到,则认为该字符串有效。示例1:输入:word="b"输出:2解释:在"b"之前插入"a",在"b"之后插入"c&qu......
  • 如何使用Python实现字符串反转
     在Python编程中,我们可能需要将字符串反转。这可以通过使用Python内置函数或自定义函数来实现。本文将向您介绍如何使用Python语言中的方法和技巧来反转字符串。 步骤: 以下是实现字符串反转的步骤: 1.定义一个字符串。 2.使用切片`[::-1]`反转字符串。 3.使用循环迭代,将原始......
  • Python中查找字符串某个字符最常用的方法!
    在Python语言中,查找字符串中某个字符是非常普通且常见的操作之一,那么Python如何查找字符串中某个字符?可以使用的方法有很多种,以下是详细内容介绍。1、使用in关键字在Python中,可以使用in关键字来查找一个字符串是否包含某个字符,具体代码如下:```pythons="Hell......
  • lc 2645. 构造有效字符串的最少插入数
    给你一个字符串word,你可以向其中任何位置插入"a"、"b"或"c"任意次,返回使word有效需要插入的最少字母数。如果字符串可以由"abc"串联多次得到,则认为该字符串有效。样例1输入:word="b"输出:2解释:在"b"之前插入"a",在"b"之后插入"c"可以得到有......
  • C#中的枚举
    C#的枚举枚举是由程序员定义的,与类或结构体一样。枚举通常是值类型,因此可以直接存出它们的数据;枚举只有一种类型的成员:命名的整数值常量。在默认情况下,编译器对第一个成员赋值0(自己也可以手动设定),对每一个后续成员的赋值依次递增。namespaceCSharpProject1;classProgram......
  • (△△△)给定 n 个字符串,请对 n 个字符串按照字典序排列。 数据范围: 1 \le n \le 100
    描述给定n个字符串,请对n个字符串按照字典序排列。数据范围:1\len\le1000\1≤n≤1000,字符串长度满足1\lelen\le100\1≤len≤100输入描述:输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。输出描述:数据......
  • python第三节:Str字符串类型(3)
    str.index(sub[, start[, end]])类似于 find(),但在找不到子字符串时会引发 ValueError。例子:str1='mynameisjack!'print(str1.index('i'))print(str1.index('b'))结果:Traceback(mostrecentcalllast): File"D:/pythonProject/test/test2024011......
  • 输入一个整数,将这个整数以字符串的形式逆序输出 程序不考虑负数的情况,若数字含有0,则逆
    描述输入一个整数,将这个整数以字符串的形式逆序输出程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001数据范围:0\len\le2^{30}-1\0≤n≤230−1输入描述:输入一个int整数输出描述:将这个整数以字符串的形式逆序输出点击查看代码#include<i......
  • JVM 21 调优指南:如何进行JVM调优,JVM调优参数
    聊聊关于JVM21的优化指南。这篇文章将会深入探讨如何进行JVM调优,介绍一些关键的JVM调优参数,并提供12个实用的代码示例。由于篇幅较长,我会分几个部分来详细讲解本文已收录于,我的技术网站ddkk.com,有大厂完整面经,工作技术,架构师成长之路,等经验分享JVM调优概览JVM(Java虚拟机)调优是......
  • js 字符串处理函数
    length、charAt()、charCodeAt()和fromCharCode()返回的结果都跟预期是一样的。这是因为在这个范围内,每个字符都是用16位表示的,而这几个方法也都基于16位码元完成操作。只要字符编码大小与码元大小一一对应,这些方法就能如期工作。这个对应关系在扩展到Unicode增补字符平面......