(C++) 数组作为结构的成员:如何获取它的大小?
(C++) Array as member of struct: how to get its size?
我有一个结构,它有一个指向数组的指针作为成员,我想确定这个数组的大小。
#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]
returns 正确的值。但是因为我想遍历这个数组,所以我需要知道它的大小。
任何人都可以向我解释为什么我的尝试不起作用以及我该如何实施它?
正如所讨论的 here 编译器不知道 int* array
指向一个 int 类型的数组,因此 sizeof() 只有 returns 指针的大小。
所以要么使用 std::vector
要么在你的结构中添加一个 size 成员。
我有一个结构,它有一个指向数组的指针作为成员,我想确定这个数组的大小。
#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]
returns 正确的值。但是因为我想遍历这个数组,所以我需要知道它的大小。
任何人都可以向我解释为什么我的尝试不起作用以及我该如何实施它?
正如所讨论的 here 编译器不知道 int* array
指向一个 int 类型的数组,因此 sizeof() 只有 returns 指针的大小。
所以要么使用 std::vector
要么在你的结构中添加一个 size 成员。