C++数组和函数

tam*_*olo 0 c++ arrays

如何创建一个接收数组作为参数的正确函数?在下面的代码中,结果应该是36,但在我的函数中只显示4.看起来它只传递第一个元素.

void test(float v[]){
    printf("size: %d\n", sizeof(v)); //RESULT: 4
}

int main(){
    GLfloat vv[] = {
        0, 0, 0,
        1, 1, 0,
        1, 0, 0
    };
    printf("size: %d\n", sizeof(vv));  //RESULT: 36
    test(vv);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Alo*_*ave 7

当您将数组作为参数传递时,它会衰减为指向第一个元素的指针.
sizeof给出指针的大小而不是数组.

最简单的解决方案是将大小作为单独的参数传递给函数.

void myFunction(float[] array, size_t size);
Run Code Online (Sandbox Code Playgroud)

  • +1注意:在C++中,如果你致力于使用固定数组,你可以使用引用参数,例如`template <size_t N> foo(float(&ar)[N])`,它也会报告正确的大小`的sizeof(AR)`. (2认同)