使用参考参数传递指向函数的指针

扎兹克

通常,这是由编译器捕获的。但是使用强制转换为函数指针,我们可以做到这一点。

我的措词可能不正确,这是一个示例,可以更好地说明我的问题:

void printintp(int *ip)
{
    printf("pointer = %p\n", ip);
    printf("*pointer = %d\n", *ip);
}

void printint(int &i)
{
    printf("int = %d\n", i);
}

int main()
{
    int a = 555;
    //int &irp = &a;   // ERROR 1
    void (*f)(void *);

    //printint((int &) &a);   // ERROR 2
    f = (void (*)(void *))printintp;
    f(&a);
    f = (void (*)(void *))printint;
    //printint(&a);       // ERROR 3 (invalid conversion of `int *` to `int`)
    f(&a);              // GOOD (why?)
    return 0;
}

当然,输出是人们所期望的:

pointer = 0x7ffd01995bf4
*pointer = 555
int = 555

所以我的问题提炼为:为什么将指针传递&a给预期功能printint好?这种不确定的行为是否恰好适用于我的实现?如果不是,如果我们只是传递参数的地址,那么参数如何int &i绑定到对象a,为什么它拒绝我标记为的对象ERROR 2

PS:我能找到这个问题的最好的是这个号称既printintpprintint是“功能相同”,但在实践中,函数调用是不同的(printintp(&a)printint(a))。

PS2:请注意,我并不是在问指针和引用之间的区别,这里已经对此进行了详细说明

雷米·勒博

这种不确定的行为是否恰好适用于我的实现?

是。大多数编译器使用内部的指针来实现引用,但这不是标准规定的。

标准语法不允许将指针原样分配给引用,反之亦然,因此,这些语句的编译器错误。

将所有内容都投放到void*,所有赌注都取决于类型安全性。使用C风格的类型转换,您几乎可以逃脱一切。您基本上是在告诉编译器您知道自己在做什么,因此它应该只接受它并且保持安静。这就是为什么当您知道自己在做什么时,这种类型转换会很危险的原因,除非绝对必要,否则应该避免。如果你一定要投,更喜欢C ++ -风格的类型转换,而不是(static_castreinterpret_cast,等)。至少到那时,您不会放弃那么多的类型安全性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用指向成员的指针将成员函数作为参数传递

来自分类Dev

使用指向作为函数参数传递的数组的指针

来自分类Dev

使用 C++11 将指向成员函数的指针作为参数传递

来自分类Python

在Python中将“指向虚拟函数的指针”作为参数传递

来自分类Dev

将指向类方法的指针作为函数参数传递

来自分类Dev

传递指向嵌套函数的指针

来自分类Dev

使用CFFI从Python传递指向C函数的指针的最佳方法

来自分类Dev

如何使用 Action<T> 参数声明 c# 构造函数(例如在 C 中传递指向 func 的指针)

来自分类Dev

使用Rcpp公开以指向对象的指针作为参数的构造函数

来自分类Dev

使用相同的指针指向具有不同参数的函数

来自分类Dev

是否有可能将指向操作符的指针作为参数传递给函数的指针?

来自分类Dev

如何访问作为指向指针参数的指针传递给函数的结构成员?

来自分类Dev

使用指针参数在c中传递函数指针

来自分类Dev

如何将指向设备函数的指针作为内核函数的参数传递?

来自分类Dev

如何传递指针变量作为参考参数?

来自分类Dev

如何正确传递指向函数的指针?

来自分类Dev

从Cython传递指向C函数的原始指针

来自分类Dev

在C函数中传递指向数组的指针

来自分类Dev

传递指向非静态成员函数的指针

来自分类Dev

将指向结构的指针传递给函数

来自分类Dev

将指向成员的指针从模板参数包传递给函数对象

来自分类Dev

C++:访问作为函数参数传递的双指针数组指向的变量的值

来自分类Dev

将指向任何成员函数的指针作为类模板参数传递

来自分类Dev

在类范围内传递指向constexpr函数的指针时,是否会推导父模板的参数?

来自分类Dev

将指向2D VLA的指针作为函数参数传递给C中的行向量

来自分类Dev

将指向字符串的指针作为函数的参数传递时发生类型冲突

来自分类Dev

如何传递指向固定大小数组类型的函数参数的指针?

来自分类Dev

doxygen C指向函数参数文档的指针

来自分类Dev

指向const的指针作为函数参数

Related 相关文章

  1. 1

    使用指向成员的指针将成员函数作为参数传递

  2. 2

    使用指向作为函数参数传递的数组的指针

  3. 3

    使用 C++11 将指向成员函数的指针作为参数传递

  4. 4

    在Python中将“指向虚拟函数的指针”作为参数传递

  5. 5

    将指向类方法的指针作为函数参数传递

  6. 6

    传递指向嵌套函数的指针

  7. 7

    使用CFFI从Python传递指向C函数的指针的最佳方法

  8. 8

    如何使用 Action<T> 参数声明 c# 构造函数(例如在 C 中传递指向 func 的指针)

  9. 9

    使用Rcpp公开以指向对象的指针作为参数的构造函数

  10. 10

    使用相同的指针指向具有不同参数的函数

  11. 11

    是否有可能将指向操作符的指针作为参数传递给函数的指针?

  12. 12

    如何访问作为指向指针参数的指针传递给函数的结构成员?

  13. 13

    使用指针参数在c中传递函数指针

  14. 14

    如何将指向设备函数的指针作为内核函数的参数传递?

  15. 15

    如何传递指针变量作为参考参数?

  16. 16

    如何正确传递指向函数的指针?

  17. 17

    从Cython传递指向C函数的原始指针

  18. 18

    在C函数中传递指向数组的指针

  19. 19

    传递指向非静态成员函数的指针

  20. 20

    将指向结构的指针传递给函数

  21. 21

    将指向成员的指针从模板参数包传递给函数对象

  22. 22

    C++:访问作为函数参数传递的双指针数组指向的变量的值

  23. 23

    将指向任何成员函数的指针作为类模板参数传递

  24. 24

    在类范围内传递指向constexpr函数的指针时,是否会推导父模板的参数?

  25. 25

    将指向2D VLA的指针作为函数参数传递给C中的行向量

  26. 26

    将指向字符串的指针作为函数的参数传递时发生类型冲突

  27. 27

    如何传递指向固定大小数组类型的函数参数的指针?

  28. 28

    doxygen C指向函数参数文档的指针

  29. 29

    指向const的指针作为函数参数

热门标签

归档