问题描述
我有一个结构体,它有一个指向数组的指针作为成员,我想确定这个数组的大小。
#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
,要么向结构中添加大小成员。