C++ C++;:数组和sizeof

C++ C++;:数组和sizeof,c++,arrays,sizeof,C++,Arrays,Sizeof,给出的说明:编写一个函数int getLength(int grid[][6]),用于计算二维数组中包含的元素数 我的第一个问题是:如何将数组传递给函数?当我尝试这样做时,我会出错 int x[][2] = {{ 1, 2 }, { 2, 3 }}; int getLength(x); 错误:“int(*)[2]”类型的值不能用于初始化“int”类型的实体 ============================================================

给出的说明:编写一个函数int getLength(int grid[][6]),用于计算二维数组中包含的元素数

我的第一个问题是:如何将数组传递给函数?当我尝试这样做时,我会出错

    int x[][2] = {{ 1, 2 }, { 2, 3 }};
    int getLength(x);
错误:“int(*)[2]”类型的值不能用于初始化“int”类型的实体

============================================================

另外,这是否和像这样使用sizeof()一样简单

int getLength(int grid[][6]){
     cout << sizeof(grid);
     return sizeof(grid);
}
intgetLength(intgrid[][6]){

cout如果将二维数组传递给函数
getLength()
as

 int x[][2];
 getLength(x);
函数声明应为:

 getLength(int x[][2]) { .. }
在上面的声明中,不需要指定行数,因为我们没有为数组分配内存,因此可以忽略。数组的维度需要列数

二维阵列的大小可以计算为:

ROW * COL * sizeof x[0][0]

如果将二维数组传递给函数
getLength()
as

 int x[][2];
 getLength(x);
函数声明应为:

 getLength(int x[][2]) { .. }
在上面的声明中,不需要指定行数,因为我们没有为数组分配内存,因此可以忽略。数组的维度需要列数

二维阵列的大小可以计算为:

ROW * COL * sizeof x[0][0]

如果将二维数组传递给函数
getLength()
as

 int x[][2];
 getLength(x);
函数声明应为:

 getLength(int x[][2]) { .. }
在上面的声明中,不需要指定行数,因为我们没有为数组分配内存,因此可以忽略。数组的维度需要列数

二维阵列的大小可以计算为:

ROW * COL * sizeof x[0][0]

如果将二维数组传递给函数
getLength()
as

 int x[][2];
 getLength(x);
函数声明应为:

 getLength(int x[][2]) { .. }
在上面的声明中,不需要指定行数,因为我们没有为数组分配内存,因此可以忽略。数组的维度需要列数

二维阵列的大小可以计算为:

ROW * COL * sizeof x[0][0]

这是不可能的。当数组被传递给函数时,它会衰减为指针,无法检索数组大小

可以使用模板从数组类型中提取大小:

template <size_t N, size_t M>
size_t getLength(int (&)[N][M]) {return N*M;}
模板
size_t getLength(int(&)[N][M]){return N*M;}

通过引用传递数组,它将保留其类型,从中可以自动推断模板参数以给出返回值。

这是不可能的。当数组传递给函数时,它将衰减为指针,无法检索数组大小

#include <iostream>
using namespace std;
int getLength(int x[][2]);
void main(){
    int x[][2] = { { 1, 2 }, { 2, 3 } };
    int y = getLength(x);
    cout << y << endl;
}
int getLength(int x[][2]){
    cout << sizeof(x) << endl;
    for (int i = 0; i < 2; i++){
        for (int j = 0; j < 2; j++)
            cout << x[i][j]<<" ";
        cout << endl;
    }
    return sizeof(x);
}
可以使用模板从数组类型中提取大小:

template <size_t N, size_t M>
size_t getLength(int (&)[N][M]) {return N*M;}
模板
size_t getLength(int(&)[N][M]){return N*M;}

通过引用传递数组,它将保留其类型,从中可以自动推断模板参数以给出返回值。

这是不可能的。当数组传递给函数时,它将衰减为指针,无法检索数组大小

#include <iostream>
using namespace std;
int getLength(int x[][2]);
void main(){
    int x[][2] = { { 1, 2 }, { 2, 3 } };
    int y = getLength(x);
    cout << y << endl;
}
int getLength(int x[][2]){
    cout << sizeof(x) << endl;
    for (int i = 0; i < 2; i++){
        for (int j = 0; j < 2; j++)
            cout << x[i][j]<<" ";
        cout << endl;
    }
    return sizeof(x);
}
可以使用模板从数组类型中提取大小:

template <size_t N, size_t M>
size_t getLength(int (&)[N][M]) {return N*M;}
模板
size_t getLength(int(&)[N][M]){return N*M;}

通过引用传递数组,它将保留其类型,从中可以自动推断模板参数以给出返回值。

这是不可能的。当数组传递给函数时,它将衰减为指针,无法检索数组大小

#include <iostream>
using namespace std;
int getLength(int x[][2]);
void main(){
    int x[][2] = { { 1, 2 }, { 2, 3 } };
    int y = getLength(x);
    cout << y << endl;
}
int getLength(int x[][2]){
    cout << sizeof(x) << endl;
    for (int i = 0; i < 2; i++){
        for (int j = 0; j < 2; j++)
            cout << x[i][j]<<" ";
        cout << endl;
    }
    return sizeof(x);
}
可以使用模板从数组类型中提取大小:

template <size_t N, size_t M>
size_t getLength(int (&)[N][M]) {return N*M;}
模板
size_t getLength(int(&)[N][M]){return N*M;}
通过引用传递数组,它将保留其类型,从中可以自动推断模板参数以给出返回值。

\include
#include <iostream>
using namespace std;
int getLength(int x[][2]);
void main(){
    int x[][2] = { { 1, 2 }, { 2, 3 } };
    int y = getLength(x);
    cout << y << endl;
}
int getLength(int x[][2]){
    cout << sizeof(x) << endl;
    for (int i = 0; i < 2; i++){
        for (int j = 0; j < 2; j++)
            cout << x[i][j]<<" ";
        cout << endl;
    }
    return sizeof(x);
}
使用名称空间std; intgetLength(intx[][2]); void main(){ int x[][2]={{1,2},{2,3}; int y=getLength(x); 不能包含 使用名称空间std; intgetLength(intx[][2]); void main(){ int x[][2]={{1,2},{2,3}; int y=getLength(x); 不能包含 使用名称空间std; intgetLength(intx[][2]); void main(){ int x[][2]={{1,2},{2,3}; int y=getLength(x); 不能包含 使用名称空间std; intgetLength(intx[][2]); void main(){ int x[][2]={{1,2},{2,3}; int y=getLength(x);
cout如果您的任务是向函数发送任意大小的2D数组,则只需发送指针和两个大小。但如果您希望通过此类函数测量大小,请小心
sizeof(grid);
将计算指针4或8的大小(即32或64位,具体取决于您的系统)但不是数组的大小。

如果您的任务是将任意大小的2D数组发送给函数,则只发送指针和两个大小。但如果您希望通过此类函数测量大小,请小心
sizeof(grid);
将计算指针4或8的大小(即32或64位,具体取决于您的系统)但不是数组的大小。

如果您的任务是将任意大小的2D数组发送给函数,则只发送指针和两个大小。但如果您希望通过此类函数测量大小,请小心
sizeof(grid);
将计算指针4或8的大小(即32或64位,具体取决于您的系统)但不是数组的大小。

如果您的任务是将任意大小的2D数组发送给函数,则只发送指针和两个大小。但如果您希望通过此类函数测量大小,请小心
sizeof(grid);
将计算指针4或8的大小(即32或64位,具体取决于您的系统)但不是数组的大小。

sizeof
不起作用,因为数组不能按值传递(函数接收指针和值)。您必须实际将长度作为另一个参数传递给函数。“给定的方向”这是不可能的,除非有进一步的信息表明数组的内容包含结束标记,或长度的特殊条目,或者您可能避免使用2D数组,并且使用一些
(例如,使用
操作符[]