c++中访问双数组的错误
c++ accessing double array error working in c
#include<stdio.h>
using namespace std;
void fun(int** a){}
int main()
{
int n;
scanf("%d",&n);
int a[n][n];
fun(a);
return 0;
}
在c++中得到这个错误,但在C中工作得很好但是工作类型转换为(void*)a然后转换为array=(int**)a:
test_.cpp:9:8: error: cannot convert
‘int (*)[(((unsigned int)(((int)n) + -0x00000000000000001)) + 1)]’
to ‘int**’ for argument ‘1’ to ‘void fun(int**)’
tried to pass a[][size] but size is not known
双精度数组不能转换为双精度指针。
像这样传递一个双精度数组给你的函数:
void fun(int arr[][5]);
您的代码有几个问题。一个是C语言,另一个是c++。
C问题:
即使在C语言中,多维数组int a[n][n]
也不会转换为int**
。粗糙(或锯齿)多维数组与连续多维数组之间存在巨大差异。不规则数组被声明和分配为
-
int ** jagged_array
以这种风格声明的锯齿数组显然可以作为int**
参数传递给某些函数;不涉及转换。对于这种类型的数组,程序员必须为指向数组中每一行的int*
指针数组分配(并最终释放)存储空间,还必须为数组的每一行分配(并最终释放)存储空间。 -
int * jagged_array[size_spec]
.
以这种风格声明的锯齿数组也可以作为int**
参数传递给某些函数,因为数组在C(和c++)中衰减为指针的方式。对于这种类型的数组,程序员必须为数组的每一行分配(最终释放)存储空间。
注意,在这两种形式中,在内存中都有一个显式的位置用于指向数组行第0个元素的int*
指针。这与多维数组不同。多维数组中指向行的指针是计算的,而不是存储的。声明为int a[n][n]
的多维数组不能衰变为int**
。相反,它会衰变成int*[n]
。在C语言中,接收可变长度多维数组(如int a[n][n]
)的函数应该声明为<return_type> fund (int n, int vla[n][n])
。(数组参数也可以指定为vla[][n]
;外部尺寸不需要。)
c++问题:
您正在使用可变长度数组。c++不支持C99的概念。这个概念在1998年c++的原始版本中是不存在的。2003年的c++标准是对1998年c++标准的一个小修订,所以它没有跳到C99。最新的c++标准c++ 11的作者明确拒绝支持这些C99变长数组。在c++中不能使用可变长度数组,至少不能移植。
当T[N][N]
衰变时,它变成T*[N]
,在传递数组时没有可行的转换
在将2D数组传递给函数时必须指定第二次元的大小。否则,如果不知道二维数组的大小,编译器就无法对二维数组元素进行寻址。使用
f(a[][5])
- "错误:数组下标的无效类型'float [10001][float]'是什么意思?
- 错误:数组下标的类型"const bool[int]"无效
- Qt并发错误:数组初始化需要大括号括起来的初始值设定项列表
- 使用GCC 4.8构建错误:数组用作初始化器
- 如何修复问题中的"teminated due to timeout"错误 数组操作 |黑客兰克?
- | 9 |错误:非静态数据成员'matrix :: row'| 9 |错误:数组绑定不是在']']'令牌|之前的整数常数
- 错误:数组的总大小不得超过0x7fffffff字节
- 错误:无法将参数“1”的“double*”转换为“double”,错误:数组下标的类型“double[double]”无
- 返回并强制转换数组指针(错误:数组下标的类型..无效)
- 返回c++中的字符错误数组
- VC++错误:数组实例化的大小来自模板化的静态常量
- c++mex错误:数组下标的类型“double[mwSize]”无效
- 错误数组用作初始值设定项,我不知道错误
- 编译错误 - 数组下标'char[int]'的类型无效
- 向量在我的类中.错误:数组new [-fpermissive]中的圆括号初始化项
- 错误:数组下标的类型无效
- 错误:数组new中的size必须是整型[-fpermissive]
- 错误:数组下标的“Pixel*[__complex__ int]”类型无效
- c++错误数组显示
- C++:错误:数组下标的类型“size_t{aka long unsigned int}[size_t{aka long