【问题标题】:How to pass a pointer to a struct declared inside another struct as a function parameter?如何将指向另一个结构内声明的结构的指针作为函数参数传递?
【发布时间】:2015-05-18 17:33:31
【问题描述】:

在我用 C 编写的一个应用程序中,我有一个结构声明为另一个结构的成员:

struct _test
{
    int varA;
    //...

    struct _small
    {
        int varB;
        //...
    } small;
} test;

现在我想创建一个访问上面varB的函数,但是我不希望它访问整个结构test,也就是我不想这样做:

#include <relevant_header>

void myFunction()
{
    test.small.varB = 0;
}

相反,我只想将small 结构作为参数传递给该函数;像这样:

#include <relevant_header>

void myFunction(struct _test::_small* poSmall)
{
    poSmall->varB = 0;
}

问题是我不知道该怎么做,也就是说,上面的代码编译不正确(我想它只是C++语法)。那么如何在 C 代码中执行此操作 - 将指针传递给在另一个结构中声明的结构?我在 SO 和 Google 中都找不到任何关于此的内容。

【问题讨论】:

  • :: 是 C 中的一个语法错误。只需使用 struct _small 来使用 struct _small 类型的变量。在 C 中没有嵌套结构的范围,就像在 C++ 中一样。并注意使用以下划线开头的名称。

标签: c function pointers struct parameters


【解决方案1】:

只要做:

void myFunction(struct _small *poSmall)
{
    poSmall->varB = 0;
}

struct _small 的范围不限于其外部结构。

【讨论】:

  • 首先,感谢您的回复。但我认为您的建议不是 100% 可以接受的:我在发布问题之前确实对其进行了测试,但我认为它是错误的,因为当我这样做时,开发平台(Qt Creator)不再识别结构中的项目. IOW,当我输入poSmall-&gt; 时,不会出现一个框来告诉变量选项 - 而在使用产生编译器错误的范围时,会出现框选项。没有其他方法,否则我将不得不坚持某种 Qt Creator 的限制? :T
  • @Momergil:Qt 使用什么语言?如果是 C,则 ouah 的答案是正确的。如果不是 C,那么问题上的标签是不正确的,任何人都可以猜测什么是合适的。如果 ouah 显示的内容不适合您,那么您使用的任何内容都不支持标准 C。
  • @Momergil 你确定你的开发工具设置为 C 模式吗?
  • @ouah AFAIK 在 Qt Creator 中没有这样的事情可做;即使您在其中创建了一个全新的 C 项目,它也不会对配置进行实际更改。当涉及到这一点时,我得到的最接近的东西是一个链接告诉将 QMAKE_CXX = gccQMAKE_CXXFLAGS = -x c 添加到 .pro 配置文件,但在这样做之后没有任何改变。
猜你喜欢
  • 2013-11-18
  • 2013-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
相关资源
最近更新 更多