当您 typedef 函数指针 b/c 我的测试代码可以工作但我认为不应该时,到底会发生什么?

问题描述 投票:0回答:2

我正在学习 C 和 C++。 我用 C++ 编写了一个程序,并且正在用 C 编写相同的程序。我想使用 C 中的结构来模仿我用 C++ 编写的类。 为此,我编写了测试代码:(1) 创建一个指向函数指针的

typedef
,(2) 一个以
typedef
作为成员的结构体,以及 (3) 将成员分配给兼容的函数。

#include <stdio.h>

// comment 1 -- see next line
typedef int (*type_def_func_ptr) (int, int);

int result(int x, int y){
    int temp_result = x + y;
    return temp_result;
}

struct TEST_STRUCT {
    int day;
    int month;
    int year;
    type_def_func_ptr tdfp;
};

int main(){
    struct TEST_STRUCT MyStruct;
    MyStruct.day = 28;
    MyStruct.month = 9;
    MyStruct.year = 2024;
        // comment 2 -- see next line
    MyStruct.tdfp = result; 
    int result1 = MyStruct.tdfp(28, 9);
    printf("Result1 is %d\n", result1);
}

代码有效。 然而,我不明白为什么代码在没有 (1)

result()
*result()
(注释 1)或 (2) 没有
MyStruct.tdfp = result being = &result
(注释 2)的情况下工作。 该代码仍然可以在 (2) 为
&result
*result
的情况下工作,这让我相信编译器正在解释我写的内容,而不是盲目编译我写的内容。

c struct function-pointers
2个回答
0
投票

由于您使用的是

result
而没有
parantheses()
,它会自动将
reference
传递给
struct
而不是值,您的代码将同样正常工作。您不需要添加额外的
pointer(*)


0
投票
  1. int result1 = MyStruct.tdfp(28, 9);
    int result1 = (*MyStruct.tdfp)(28, 9);
    做同样的事情。

  2. MyStruct.tdfp = result;
    MyStruct.tdfp = &result;
    也做同样的事情。

这些方便的“快捷方式”在 C++ 中也可用。如果函数是成员函数,则只需

&
即可获取函数的地址。

© www.soinside.com 2019 - 2024. All rights reserved.