C 带指针的多维数组中的数组大小

C 带指针的多维数组中的数组大小,c,arrays,pointers,C,Arrays,Pointers,我使用的库以这种方式创建多维数组: const unsigned short arrayA[5] = {1, 2, 3, 4, 5}; const unsigned short arrayB[3] = {7, 8, 9}; const unsigned short *multiArray[] ={arrayA, arrayB}; 我得到了它的价值,它是有效的: printf("03: %d\n", multiArray[0][3]); //4 printf("12: %d\n", multi

我使用的库以这种方式创建多维数组:

const unsigned short arrayA[5] = {1, 2, 3, 4, 5};
const unsigned short arrayB[3] = {7, 8, 9};

const unsigned short *multiArray[] ={arrayA, arrayB};
我得到了它的价值,它是有效的:

printf("03: %d\n", multiArray[0][3]); //4
printf("12: %d\n", multiArray[1][2]); //9
当我需要获得任何阵列的大小时,就会出现问题,我尝试了以下方法:

printf("Size of first array: %ld \n", sizeof(multiArray[0])/sizeof(multiArray[0][0]));
它返回2,可能是因为它使用了地址

那么我怎样才能得到数组的大小呢

我必须这样做,尽量不改变数组的声明方式,因此数组已经存在,我只需要获得大小


有什么办法吗?

你不能。您必须事先知道数组的大小,并将其作为附加参数传递。

如果对指针执行
sizeof
,则得到的是实际指针的大小,而不是它指向的内容。您必须以其他方式跟踪所包含数组的大小。

无法推断multiArray中指针指向的数组的大小,因为无法执行任何计算,因为两个数组(arrayA和arrayB)将存储在任意位置。一个好的做法是存储阵列的大小。

你不能!您应该保存这些数据并将其传递到任何需要的地方

顺便说一句,执行此操作时:
sizeof(多数组[0])/sizeof(多数组[0][0])


基本上,您可以在特定的计算机上执行
sizeof()/sizeof()
=>2。

正如其他人所说,您不能这样做,相反,您可以构建自己的类型:

#include <stdio.h>

struct cont {
    const unsigned short *value;
    size_t len;
};

int main(void)
{
    const unsigned short arrayA[5] = {1, 2, 3, 4, 5};
    const unsigned short arrayB[3] = {7, 8, 9};

    struct cont arrays[] = {
        {arrayA, sizeof(arrayA) / sizeof(arrayA[0])},
        {arrayB, sizeof(arrayB) / sizeof(arrayB[0])},
    };

    printf("03: %d\n", arrays[0].value[3]);
    printf("12: %d\n", arrays[1].value[2]);


    printf("Size of first array: %ld \n", arrays[0].len);

    return 0;
}
#包括
结构控制{
常量无符号短*值;
尺寸透镜;
};
内部主(空)
{
常量无符号短数组[5]={1,2,3,4,5};
常量无符号短数组b[3]={7,8,9};
结构控制数组[]={
{arrayA,sizeof(arrayA)/sizeof(arrayA[0]),
{arrayB,sizeof(arrayB)/sizeof(arrayB[0]),
};
printf(“03:%d\n”,数组[0]。值[3]);
printf(“12:%d\n”,数组[1]。值[2]);
printf(“第一个数组的大小:%ld\n”,数组[0].len);
返回0;
}

可以获得矩阵的行数和列数:

int main(void) {
     int row;
     int column;
     int matrix[4][5]={{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}};

     row=sizeof(matrix)/sizeof(matrix[0]); 
     column=sizeof(matrix[0])/row;

     printf("row %i \n",row);
     printf("column %i \n",column);
     return 0;
}

arrayA和arrayB不应该是指向数组IMHO的指针。抱歉,有一个输入错误,已修复now@AntonioMG你不能。一旦您丢失了对原始数组的跟踪(通过使用指向它的指针,或者通过将它传递给函数等),编译器也会丢失对数组的元数据的跟踪,比如它的大小。