结构帮助。将卡片结构分配给套牌结构中保存的卡片数组

2024-06-28

这是我的两个结构:

typedef struct _card {
    int suit;
    int value;
} card;

typedef struct _deck {
    int num_cards;
    card *cards;
} deck;

这是我的制作卡片功能:

card *make_card(int suit, int value)
{
  card *newCard = malloc(sizeof(card));
  newCard->suit = suit;
  newCard->value = value;

  return newCard;
}

现在我有点卡住了。我必须制作一副纸牌。我知道如何将每个值分配给卡,但我对如何在内存中分配它感到困惑。我知道这与套牌结构中的一系列卡片有关,但我不知道如何做。

deck *make_standard_deck()
{
  for (int i = 0; i <= 3; i++)
  {
    for (int j = 1; j <= 13; j++)
    {
      deck.cards[i] = make_card(int suit, int value);
    }
  }
}

您应该先分配整个卡片阵列,然后再分配单独的卡片。替代。您还可以使用 realloc 使数组变得越来越长,但这在这里似乎没有必要。

首先更改 make_card (也许可以重命名)

card *init_card(card* newCard, int suit, int value)
{
  newCard->suit = suit;
  newCard->value = value;
  return newCard;
}

然后更改 make_standard_deck

deck *make_standard_deck()
{
  const int numberOfValues = 13; // use constants when you can
  const int numberOfSuits = 4;

  deck* d = malloc(sizeof(deck)); // normally check return value
  d->num_cards = numberOfValues*numberOfSuits;
  d->cards = malloc(sizeof(card) * (d->num_cards));

  for (int i = 0; i < numberOfSuits; i++)
  {
    for (int j = 0; j < numberOfValues; j++)
    {
      // pass the card to initialized to the function
      // same as &(d->cards[i])
      init_card(d->cards + i, i + 1, j + 1);
    }
  }
  return d;
}

当你释放它时

void freeDeck( deck *d )
{
  if ( d != NULL )
  {
    free( d->cards );
  }
  free( d );
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

结构帮助。将卡片结构分配给套牌结构中保存的卡片数组 的相关文章

  • 反序列化 GUID 数组时出现 JSON.NET 异常

    我正在使用 JSON NET 反序列化从浏览器发送的 AJAX HTTP 请求 并且在使用 Guid 作为参数的 Web 服务调用时遇到问题 当我使用内置的 NET 序列化器时 这工作得很好 首先 流中的原始字节如下所示 System Te
  • 在 SelectSingleNode 中使用 XPath:从 XML 中检索单个元素(如果存在)

    我的 XML 看起来像
  • boost::noncopyable 是如何工作的

    我在 C 实践中偶然发现了两个愚蠢的问题 据我所知 c 中的复制构造函数和赋值运算符不是继承的 那么 boost noncopyable 在这种情况下如何帮助禁止这些东西呢 class X private boost noncopyable
  • 我想要 Linux 上的 C 函数来收集核心转储而不终止进程

    abort 确实收集核心转储 但我不希望进程终止 dump core 收集核心转储 但在内核空间中 用户空间中是否有与 dump core 等效的函数 自己做的一个简单方法是fork进程 创建父进程的完整副本 并调用abort来自子进程 子
  • PHP 数组比较

    如何比较两个数组 例如我有array a b c and array a c b 当它们进行比较时 它会返回 true 但如果其中一个字母没有在其中之一中找到 它将返回 false 顺序并不重要 在比较之前 您需要将两个数组的内容调整为相同
  • 如何使用 lstat() 确定是否为硬链接

    我的操作系统是linux 我用 C 编程 我知道我可以使用 lstat 来识别软链接 即使用 S ISLNK st st mode 但我如何识别该链接是硬链接呢 如果链接是硬链接 它将被视为常规文件 但是 我还想区分常规文件和硬链接 有什么
  • 什么是合适的 NHibernate / Iesi.Collections.Generic.ISet 替代品?

    在最新版本的 Iesi Collections 中缺少 Iesi Collections Generic ISet 似乎有三种选择 链接哈希集 只读集 同步集 Iesi Collections Generic ReadOnlySet 似乎最
  • C++ 局部变量销毁顺序

    C 11 中是否存在局部变量释放的定义顺序 更简洁地说 同一作用域中两个局部变量的析构函数的副作用将以什么顺序变得可见 e g struct X X do something int main X x1 X x2 return 0 Is x
  • 为什么要在 C 和 C++ 项目中创建 include/ 目录?

    当我处理我的个人 C 和 C 项目时 我通常把file h and file cpp在同一目录中 然后file cpp可以参考file h with a include file h 指示 然而 通常会发现库和其他类型的项目 如 linux
  • 处理可选依赖项 (C#)

    我们有一个可以选择与 TFS 集成的应用程序 但是由于集成是可选的 所以我显然不希望所有机器都需要 TFS 程序集作为要求 我应该怎么办 我是否可以在主程序集中引用 TFS 库 并确保在使用 TFS 集成时仅引用 TFS 相关对象 或者 更
  • CMake include_directories 和 add_subdirectories 之间的区别?

    我正在学习 CMake 来构建 C 代码 并努力解决以下概念 在我的根级目录中 我有一些 cpp 文件和 CMakeLists txt 它们在 gen cpp 目录中成功生成了一些 thrift 代码 我的根级别 CMakeLists tx
  • C++ 中的结构填充

    如果我有一个struct在 C 中 有没有办法安全地将其读 写到跨平台 编译器兼容的文件中 因为如果我理解正确的话 每个编译器都会根据目标平台进行不同的 填充 不 那是不可能的 这是因为C 在二进制层面缺乏标准化 Don Box http
  • “#include ”导致“错误:asm/io.h:没有这样的文件或目录”

    我正在使用 gentoo 并尝试编译一个程序来控制并行端口上的位 它的顶部附近有这一行 include
  • Linux 相当于 GetCommandLine 和 CommandLineToArgv?

    我想知道是否有一些 API 可以在 Linux 上获取当前进程的命令行参数 我想我是非常不清楚的 该问题的真正目的是通过命令行参数传递 unicode 文件名 从文件中读取 proc self cmdline 例如 wallyk zf od
  • 检测非 DPI 感知应用程序是否已扩展/虚拟化

    我正在尝试在 WinForms 应用程序中检测它是否由于操作系统具有高 DPI 而以缩放 虚拟化模式启动 目前 在以 3840x2400 缩放 200 缩放运行的系统中 应用程序将分辨率视为 1920x1200 DPI 为 96 缩放因子为
  • 传递给 WCF 服务的可选查询字符串参数

    我想知道如何使用 string limit WebOperationContext Current IncomingRequest UriTemplateMatch QueryParameters Limit 在我的wcf中这个方法 Cit
  • 如何在 JSON 输出上强制采用 ISO 格式“YYYY-MM-DDThh:mm:ss.sss”?

    我有一个 ASP NET WebApi2 api 它返回一些 JSON 格式的时间戳 时间戳具有毫秒分辨率 通常我会得到这种格式的时间戳 这很好 YYYY MM DDThh mm ss sss 不幸的是 如果时间戳恰好用整秒对日期进行编码
  • 在 QML 中使用 C++ 枚举作为字符串

    我想做的是在 C 中使用以下枚举 class MyClass public QQuickItem Q OBJECT Q PROPERTY MyEnum enumValue READ getEnumValue public enum MyEn
  • .NET Compact Framework 上的 DateTime.Now 中的毫秒始终为零?

    我想要一个时间戳对于日志Windows 移动项目 精度必须至少在一百毫秒范围内 然而我打电话给DateTime Now返回一个DateTime对象与Millisecond属性设置为零 还有Ticks属性相应地进行四舍五入 如何获得更好的时间
  • 着色器可以旋转形状以面向相机吗?

    我制作了一个球出现在 3D 空间中的场景 三角球耗费大量资源 所以我使用带有球纹理的二维表面 四边形 来完成此操作 但现在我需要在每次相机移动时调整形状的方向 我使用位置变换和 LookAt 方法来完成此操作 问题是我可以优化这个吗 如果可

随机推荐