如何在 C 中创建用户定义的类型?
How create user-defined types in C?
出于未知原因,我需要知道如何将标准 char a[10];
替换为 string a;
(是的,我在 CS50 中看到过)。那么,如何创建自己的名为 string
的变量类型?
C 中的用户定义类型是结构、联合、枚举和函数。看来您还可以在列表中包含数组。
例如
struct Point
{
int x;
int y;
};
或
enum Dimension { N = 100 };
Point a[N];
在此示例中,数组类型为 Point[N]
。
事实上任何派生类型(包括指针)都可以被认为是用户自定义类型。 C 标准没有定义和使用 tern 用户定义类型。
用户定义的类型是以下之一:struct
、union
或 enum
。例如,struct
:
struct worker {
int id;
char firstName[255];
char lastName[255];
};
创建实例:
struct worker w1 = { 1234, "John", "Smith" };
就像typedef char string[10];
一样简单。
但请不要这样做。 在 typedef 后面隐藏数组或指针是非常糟糕的做法。代码变得更难阅读,你从中一无所获。请参阅 Is it a good idea to typedef pointers? - 相同的参数适用于数组。
将隐藏数组命名为 string
特别糟糕,因为这是 C++ 使用的准确拼写 std::string
。
请注意,CS50 是一门糟糕的课程,因为它教你如何做。 SO 社区厌倦了 "un-teaching" 本课程受害者的坏习惯。一般而言,远离有问题的 Internet 教程。
如果您想创建某种自定义字符串类型,正确且正确的方法是改用结构。
放大@Lundin 在他的回答中所说的内容:
C 很难学的原因之一——尤其是对于来自其他语言的学生来说——是 C 确实没有有第一个-class "string" 类型。尽管它们很重要,但 C 中的字符串是由 char
的数组拼凑在一起的,并且通常通过 char *
指针访问。拼凑是由编译器、程序员和库函数(如 strcpy
和 printf
.
之间的松散协作执行的
虽然我说的是"strings are cobbled together out of arrays of char
, and often accessed via char *
pointers",但这不是表示C的字符串类型是char []
,也不表示C的字符串类型是 char *
.
如果您想象 C 有一个 first-class 字符串类型,就像 char
、int
和 double
一样由语言自动为您处理,你会非常困惑和沮丧。如果您尝试给自己一个名为 string
的 typedef,这将 not 将您从混乱中隔离开来,not 会缓解您的挫败感, 不会 让您的生活更轻松。这只会使问题更加模糊。
出于未知原因,我需要知道如何将标准 char a[10];
替换为 string a;
(是的,我在 CS50 中看到过)。那么,如何创建自己的名为 string
的变量类型?
C 中的用户定义类型是结构、联合、枚举和函数。看来您还可以在列表中包含数组。
例如
struct Point
{
int x;
int y;
};
或
enum Dimension { N = 100 };
Point a[N];
在此示例中,数组类型为 Point[N]
。
事实上任何派生类型(包括指针)都可以被认为是用户自定义类型。 C 标准没有定义和使用 tern 用户定义类型。
用户定义的类型是以下之一:struct
、union
或 enum
。例如,struct
:
struct worker {
int id;
char firstName[255];
char lastName[255];
};
创建实例:
struct worker w1 = { 1234, "John", "Smith" };
就像typedef char string[10];
一样简单。
但请不要这样做。 在 typedef 后面隐藏数组或指针是非常糟糕的做法。代码变得更难阅读,你从中一无所获。请参阅 Is it a good idea to typedef pointers? - 相同的参数适用于数组。
将隐藏数组命名为 string
特别糟糕,因为这是 C++ 使用的准确拼写 std::string
。
请注意,CS50 是一门糟糕的课程,因为它教你如何做。 SO 社区厌倦了 "un-teaching" 本课程受害者的坏习惯。一般而言,远离有问题的 Internet 教程。
如果您想创建某种自定义字符串类型,正确且正确的方法是改用结构。
放大@Lundin 在他的回答中所说的内容:
C 很难学的原因之一——尤其是对于来自其他语言的学生来说——是 C 确实没有有第一个-class "string" 类型。尽管它们很重要,但 C 中的字符串是由 char
的数组拼凑在一起的,并且通常通过 char *
指针访问。拼凑是由编译器、程序员和库函数(如 strcpy
和 printf
.
虽然我说的是"strings are cobbled together out of arrays of char
, and often accessed via char *
pointers",但这不是表示C的字符串类型是char []
,也不表示C的字符串类型是 char *
.
如果您想象 C 有一个 first-class 字符串类型,就像 char
、int
和 double
一样由语言自动为您处理,你会非常困惑和沮丧。如果您尝试给自己一个名为 string
的 typedef,这将 not 将您从混乱中隔离开来,not 会缓解您的挫败感, 不会 让您的生活更轻松。这只会使问题更加模糊。