c - 将指针与函数和结构一起使用

标签 c

你好,我正在自学 C,我对以下代码有点困惑,因为我不知道我是否正确理解了这些代码。如果有人能阅读我的解释并在我错的时候纠正我,我将不胜感激。

代码来自头文件。程序的功能在这一点上应该是无趣的,因为我的理解问题是关于函数返回的指针和值。所以首先我要在我的员工结构中声明 3 个 char 数组和一个整数。

struct employee
{
    char firstname[11];
    char lastname[11];
    char number[11];
    int salary;
}


头文件中声明了5个函数。第一个函数接受 4 个值(3 个指针和一个 int)并返回一个指向结构的指针。第二个函数获取指向“struct employee”的指针返回指向struct employee 中数组“char firstname”的元素的指针。函数 3 和 4 对其他两个数组执行相同的操作。
函数 5 获取一个指向 struct employee 的指针,但返回一个 int 而不是 指针。所以它只是在结构中使用声明的变量。

struct employee* createEmployee(char*, char*, char*, int); //1
char* firstname (struct Employee*);                        //2
char* lastname (struct Employee*);                         //3
char* number (struct Employee*);                           //4
int salary (struct Employee*);                             //5

最佳答案

你的理解很正确。为了更加准确和/或减少对英语的滥用,函数 2-4 返回一个指针指向相应数组的元素。

这个想法是每个数组的内容代表某种文本,每个元素对应一个文本字符,直到第一次出现零值(用于标记“字符串”的结尾)。请记住,这里没有针对 Unicode 的规定,甚至没有规定编码:我们假设为 ASCII,并且对于不在 0..127 范围内的任何字节,所有赌注都没有。 char 类型的更好名称是 byte;但那时我们真的不知道更好。 (您还应该知道 char 是与 signed charunsigned char 不同的类型,并且 char 可以签名也可以不签名。)

这样,名称和编号可以是任意长度最多 10(保留第 11 个字节以便为具有零值的“空终止符”留出空间),并且返回指针可用于检查 - 和修改;但这可能不是一个好主意 - 数组中的数据是 Employee 结构的一部分。

作为Employeesalary 返回的int 是结构中的副本。因此,尽管我们可以看到整个值,但这不会让我们修改结构中的值。当然,只要我们有 struct 定义和 Employee 实例,就没有保护;我们可以直接访问成员而不是通过函数。

在 C 中,我们通过提供这些定义来实现“封装”和“数据隐藏”。相反,我们只需将 struct Employee; 和函数声明放在 header 中,并将结构定义放在实现文件中。现在调用代码不知道什么是 Employee ;仅关于它可以做什么

关于c - 将指针与函数和结构一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4423801/

相关文章:

c - 是否需要使用struct为C语言链表中的每个节点分配内存?

c - 实现 memset : dl register segfault

C Strtok 段错误

c - 嵌套的 TAILQ 双自由错误

c - 如何在特定界面上使用 cURL

c - 如何在V4L2中正确设置扩展控件?

html - 如何在 HTML 中显示原始 rgb 图像

android - 在linux C++代码中从android中创建的.so文件调用函数

c++ - 引用 const char* 数组

c++ - 地理坐标插值c++