c - 定义指向结构数组的指针
问题描述
我遇到了这段代码:
typedef struct {
char *name;
char *value;
} SPAM;
typedef struct {
char *name;
int num_spams;
SPAM *spams;
} EGG;
SPAM my_spams[2] = {
{ "name1", "value1" },
{ "name2", "value2" },
};
EGG my_eggs[1] = {
{ "first egg", 1, my_spams }
};
EXPORT(int) getSPAMANDEGGS(EGG **eggs)
{
*eggs = my_eggs;
return 1;
}
在这个声明中,EGG 结构的定义不应该有 SPAM **spams; 作为垃圾邮件成员的定义,因为我们稍后会在那里存储一个垃圾邮件数组?
解决方案
不,不应该。值数组SPAM
通过单个指针表示,因此SPAM *spams
是正确的。
函数的参数getSPAMANDEGGS
需要两个星号的原因是它设置了一个从外部传递给它的指针:
EGG *eggArray; // First asterisk is due to *
int eggArraySize = getSPAMANDEGGS(&eggArray); // Second asterisk is due to &
没有&
运算符getSPAMANDEGGS
将无法为eggArray
指针设置新值。
推荐阅读
- python - Cutout2D 不以星系为中心
- mysql - 如何在 C# 应用程序中使用 MySQL 连接器/NET
- mysql - 如何在 Google Cloud Platform 中使用多个 MySQL 主服务器?
- javascript - 将二维数组从一个 JavaScript 函数传递到另一个
- node.js - 在单存储库中使用 Lerna 对多个 Node 应用程序进行 Dockerizing
- r - 忽略特定警告,但不忽略 R 中的其他警告
- c++ - 在 C++ 类中初始化静态值彼此相等
- sharepoint-online - 我们可以使用逻辑应用来获取 Sharepoint 在线网站上的点击次数吗
- qt - Qt Creator:没有可用的文档
- asp.net-core - 异步等待返回任务 Null .Net Core