C++ (C+;+;)数组作为struct的成员:如何获取其大小?
我有一个结构,它有一个指向数组的指针作为成员,我想确定这个数组的大小C++ (C+;+;)数组作为struct的成员:如何获取其大小?,c++,arrays,pointers,struct,sizeof,C++,Arrays,Pointers,Struct,Sizeof,我有一个结构,它有一个指向数组的指针作为成员,我想确定这个数组的大小 #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
#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: 5
当我直接在数组上使用sizeof(a)/sizeof(*a)
方法时,它可以工作,但在myStruct
的成员上使用时,它不工作。起初我认为我不能像这样为数组成员分配指针,但是索引my_struct.array[I]
会返回正确的值。但是当我想迭代这个数组时,我需要知道它的大小
有人能给我解释一下为什么我的尝试不起作用,以及我如何实现它吗?如前所述,编译器不知道int*array
指向int类型的数组,因此sizeof()只返回指针的大小
因此,请使用或向结构中添加一个size成员。如前所述,编译器不知道int*array
指向int类型的数组,因此sizeof()只返回指针的大小
因此,可以使用或向结构中添加一个size成员。您全局声明的第一个数组是静态分配的,因此当您调用
sizeof(array)
时,它会给出它总共使用的字节数。虽然结构中的数组不是真正的数组,它只是一个指针,所以sizeof(struct.array)
只给出了指针的大小,在计算机中它似乎是4,因此4/2=2。从结构内部将int*array
更改为int array[5]
,您将看到所需的结果。@fvalasiad-hmm,我明白了。我实际上希望这个数组的大小是可变的。有没有办法绕过它或者在C++中一般不可能吗?你想使用动态数组吗?如果是这种情况,请使用std::vector
。除非您的意思是您想自己创建一个动态数组,否则如果是这种情况,您应该在结构中添加一个size\u t size
属性来保存数组的大小,并相应地动态重新分配内存。@fvalasiad数组在运行时不会更改,但我希望有几个此结构的实例,每个都有不同大小的数组。但是包括size
属性对我来说很有用。谢谢你的帮助!您全局声明的第一个数组是静态分配的,因此当您调用sizeof(array)
时,它会给出它总共使用的字节数。虽然结构中的数组不是真正的数组,它只是一个指针,所以sizeof(struct.array)
只给出了指针的大小,在计算机中它似乎是4,因此4/2=2。从结构内部将int*array
更改为int array[5]
,您将看到所需的结果。@fvalasiad-hmm,我明白了。我实际上希望这个数组的大小是可变的。有没有办法绕过它或者在C++中一般不可能吗?你想使用动态数组吗?如果是这种情况,请使用std::vector
。除非您的意思是您想自己创建一个动态数组,否则如果是这种情况,您应该在结构中添加一个size\u t size
属性来保存数组的大小,并相应地动态重新分配内存。@fvalasiad数组在运行时不会更改,但我希望有几个此结构的实例,每个都有不同大小的数组。但是包括size
属性对我来说很有用。谢谢你的帮助int*数组
从来都不是数组。这是一个指针。它指向一个int
。int
可能是int
数组中的第一个元素,但正如这个答案所示,它仍然只是一个指针+1.int*数组
从来都不是数组。这是一个指针。它指向一个int
。int
可能是int
数组中的第一个元素,但正如这个答案所示,它仍然只是一个指针+1.
A: 5
B: 5