通过引用传递可在C中使用,但不适用于此代码的C ++

阿诺德

在下面的代码中,当我将其用作ac文件时,它会编译并运行,但是当我将其作为cpp文件运行时,会出错。

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;

struct ploc_t {
                 int num;
                 ploc_t *right;
                };


ploc_t *create_ploc(int *point , int *triangles, int n , int m){


    // just for testing
    ploc_t *result;
    result=(ploc_t*)malloc(sizeof(ploc_t));
    return result;
}



int main( )
{

    int points[1][2];
    int triangles[1][2];

    points[0][1]=2;
    points[0][2]=4;

    triangles[0][1]=8;
    triangles[0][2]=6;


    create_ploc(points,triangles,3,4);


}

使用cpp文件时遇到的错误是:

无效的参数候选为:plot_t(int *,int *,int,int)

为什么会出现此错误?以及如何解决?

在这种情况下,C和C ++之间的区别在于,尽管不鼓励使用C语言,但您正在做的事情(将指针传递int[2]给希望指向指针的函数int)是合法的,而在C ++中则不允许这样做。因此在C语言中,编译器将发出警告。如果您不使用该-Wall标志,则可能看不到警告。在C ++中,是否使用-Wall(尽管您总是应该这样做)都没有关系,因为这是一个错误,并且编译将失败。

作为参数“衰减”传递到指向数组元素类型的指针的数组。(这不是数组衰减到指针的唯一情况,但这是与此问题相关的一种情况。)您的数组是type int[][2],因此元素类型是int[2]因此,当您将它们用作参数时,它们会衰减为int(*)[2],这是C / C ++特有的说法:“一个指向由两个元素组成的整数数组的指针”。

指向anint的指针和指向an的指针有什么区别int[2]一个重要的区别是目标的大小:

int a[2];
int* p = a;
p++;
// p now points to a[2]; it was incremented by sizeof(int)

int aa[10][2];
int(*pp)[2] = aa;
pp++;
// pp now points to aa[2]; it was incremented by sizeof(int[2])

您可能想定义函数以接受二维数组,而不是与数组指针的语法作斗争:

ploc_t *create_ploc(int points[][2], int triangles[][2], int n , int m);

但是您可以用完全相同的语义写出衰减的类型:

ploc_t *create_ploc(int (*points)[2], int (*triangles)[2], int n , int m);

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

RegExp可在perl,javascript和Objective-c中使用,但不适用于Java

来自分类Dev

RegExp可在Perl,JavaScript和Objective-C中使用,但不适用于Java

来自分类Dev

编码新功能,可在代码块中使用,但不适用于vscode

来自分类Dev

正则表达式可在regex测试器中使用,但不适用于c#

来自分类Dev

SQL Server查询可在Management Studio中使用,但不适用于C#(ServiceStack.OrmLite)

来自分类Dev

C字符串作为模板非类型参数可在gcc 6.3中使用,但不适用于Visual Studio 2017(x64为19.16.27027.1)

来自分类Dev

MySQL查询可在PHPMyAdmin中使用,但不适用于PHP

来自分类Dev

SQL Query可在SQL Developer中使用,但不适用于Java端

来自分类Dev

CSS效果可在Chrome中使用,但不适用于IE 11

来自分类Dev

erb内联样式可在Safari中使用,但不适用于Chrome

来自分类Dev

Javascript可在JS Fiddle中使用,但不适用于Chrome / IE

来自分类Dev

Mysql查询可在Phpmyadmin中使用,但不适用于PHP

来自分类Dev

$(this)选择器可在jsfiddle中使用,但不适用于我的脚本

来自分类Dev

POST请求中的JSON可在HttpRequester中使用,但不适用于python Requests

来自分类Dev

MySQL INSERT查询可在Phpmyadmin中使用,但不适用于PHP

来自分类Dev

可在jsfiddle中使用,但不适用于html页面

来自分类Dev

SQL查询可在phpMyAdmin中使用,但不适用于php页面

来自分类Dev

Javascript可在JS Fiddle中使用,但不适用于Chrome / IE

来自分类Dev

$(this)选择器可在jsfiddle中使用,但不适用于我的脚本

来自分类Dev

SQL Query可在SQL Developer中使用,但不适用于Java端

来自分类Dev

MySQL查询可在MySQL中使用,但不适用于Java

来自分类Dev

RegEx替换可在Ruby gsub中使用,但不适用于sed

来自分类Dev

Python多重处理可在Linux中使用,但不适用于Windows

来自分类Dev

阵列比较可在Chrome中使用,但不适用于Chrome IPAD

来自分类Dev

C++ 模板代码适用于 msvc 2015 但不适用于 2017

来自分类Dev

我遵循oracle中有关JLayer的教程,但不适用于此代码

来自分类Dev

在 c 中使用 python api 不适用于 mac

来自分类Dev

Flexbox:具有大子元素的两列布局-可在Chrome中使用,但不适用于Firefox / IE

来自分类Dev

SQL查询可在SQL Server Management Studio中使用,但不适用于ASP.Net应用程序

Related 相关文章

  1. 1

    RegExp可在perl,javascript和Objective-c中使用,但不适用于Java

  2. 2

    RegExp可在Perl,JavaScript和Objective-C中使用,但不适用于Java

  3. 3

    编码新功能,可在代码块中使用,但不适用于vscode

  4. 4

    正则表达式可在regex测试器中使用,但不适用于c#

  5. 5

    SQL Server查询可在Management Studio中使用,但不适用于C#(ServiceStack.OrmLite)

  6. 6

    C字符串作为模板非类型参数可在gcc 6.3中使用,但不适用于Visual Studio 2017(x64为19.16.27027.1)

  7. 7

    MySQL查询可在PHPMyAdmin中使用,但不适用于PHP

  8. 8

    SQL Query可在SQL Developer中使用,但不适用于Java端

  9. 9

    CSS效果可在Chrome中使用,但不适用于IE 11

  10. 10

    erb内联样式可在Safari中使用,但不适用于Chrome

  11. 11

    Javascript可在JS Fiddle中使用,但不适用于Chrome / IE

  12. 12

    Mysql查询可在Phpmyadmin中使用,但不适用于PHP

  13. 13

    $(this)选择器可在jsfiddle中使用,但不适用于我的脚本

  14. 14

    POST请求中的JSON可在HttpRequester中使用,但不适用于python Requests

  15. 15

    MySQL INSERT查询可在Phpmyadmin中使用,但不适用于PHP

  16. 16

    可在jsfiddle中使用,但不适用于html页面

  17. 17

    SQL查询可在phpMyAdmin中使用,但不适用于php页面

  18. 18

    Javascript可在JS Fiddle中使用,但不适用于Chrome / IE

  19. 19

    $(this)选择器可在jsfiddle中使用,但不适用于我的脚本

  20. 20

    SQL Query可在SQL Developer中使用,但不适用于Java端

  21. 21

    MySQL查询可在MySQL中使用,但不适用于Java

  22. 22

    RegEx替换可在Ruby gsub中使用,但不适用于sed

  23. 23

    Python多重处理可在Linux中使用,但不适用于Windows

  24. 24

    阵列比较可在Chrome中使用,但不适用于Chrome IPAD

  25. 25

    C++ 模板代码适用于 msvc 2015 但不适用于 2017

  26. 26

    我遵循oracle中有关JLayer的教程,但不适用于此代码

  27. 27

    在 c 中使用 python api 不适用于 mac

  28. 28

    Flexbox:具有大子元素的两列布局-可在Chrome中使用,但不适用于Firefox / IE

  29. 29

    SQL查询可在SQL Server Management Studio中使用,但不适用于ASP.Net应用程序

热门标签

归档