(C++) 数组作为结构的成员:如何获取其大小?

问题描述

我有一个结构体,它有一个指向数组的指针作为成员,我想确定这个数组的大小。

#include <stdio.h>

int array[]={1,2,3,4,5};

struct myStruct {
    int *array;
};

struct myStruct my_struct={.array=array};

int main() {
    printf("A: %d\n",sizeof(array)/sizeof(*array)); // this works
    printf("B: %d\n",sizeof(my_struct.array)/sizeof(*my_struct.array)); // this doesn't work
}

打印:

A: 5
B: 2

我期望:

A: 5
B: 5

当我直接在数组上使用 sizeof(a)/sizeof(*a) 方法时它可以工作,但在 myStruct 的成员上使用时它不起作用。起初我以为我不能像这样分配一个指向数组成员的指针,但索引 my_struct.array[i] 返回正确的值。但是当我想遍历这个数组时,我需要知道它的大小。

谁能向我解释为什么我的尝试不起作用以及我该如何实施它?

解决方法

正如所讨论的 here,编译器不知道 int* array 指向一个 int 类型的数组,因此 sizeof() 只返回指针的大小。

因此,要么使用 std::vector,要么向结构中添加大小成员。