Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ (C+;+;)数组作为struct的成员:如何获取其大小?_C++_Arrays_Pointers_Struct_Sizeof - Fatal编程技术网

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