如何在void函数中使用sizeof来确定2d矩阵的大小? [重复]

问题描述 投票:0回答:1
#include<stdio.h>   
#include<stdlib.h>
#include<string.h>

void find_col_num(int matrix[][5])
{
    printf("size of matrix = %d\n",sizeof(matrix));
    printf("size of one element = %d\n", sizeof(matrix[0][0]));
    printf("number of columns = %d\n", sizeof(matrix)/(sizeof(matrix[0][0])*5));
}

int main()
{
    int a[6][5] = { {0,0,0,0,0},
                    {0,1,1,1,1},
                    {1,0,1,0,0},
                    {1,0,1,0,0},
                    {1,0,1,0,0},
                    {0,1,1,1,1} };

    find_col_num(a);

    printf("\n\n\n");

    printf("size of a = %d\n",sizeof(a));
    printf("size of one element = %d\n", sizeof(a[0][0]));
    printf("number of columns = %d\n", sizeof(a)/(sizeof(a[0][0])*5));

    return 0;
}

输出:

size of matrix = 8
size of one element = 4
number of columns = 0



size of a = 120
size of one element = 4
number of columns = 6

我想在void或int函数中使用sizeof来确定矩阵的列数。我知道我必须在函数中指定矩阵的行号。我该如何处理?

c function sizeof
1个回答
0
投票

参数,int matrix[][5]传递给函数时,decays指向指向int的指针。这就是为什么它的大小为8(系统中指针的大小)的原因。

因此,计算出的列数不是您期望的。

[恐怕在不更改find_col_num ()签名的情况下没有机会获得您想要的东西。最好的方法可能是将矩阵的总大小传递给函数:

void find_col_num(int matrix[][5], size_t tot_size)
{
    /* ... */
}

您可以这样称呼它

find_col_num(a, sizeof(a));
© www.soinside.com 2019 - 2024. All rights reserved.