【发布时间】:2021-08-09 16:08:01
【问题描述】:
我有一个结构,它有一个指向数组的指针作为成员,我想确定这个数组的大小。
#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] 会返回正确的值。但是因为我想遍历这个数组,所以我需要知道它的大小。
谁能向我解释为什么我的尝试不起作用以及如何实现它?
【问题讨论】:
-
您全局声明的第一个数组是静态分配的,因此当您调用
sizeof(array)时,它会为您提供它总共使用的字节数。虽然你的结构中的数组并不是真正的数组,它只是一个指针,所以sizeof(struct.array)只是给你指针的大小,它在你的计算机中似乎是 4 ,因此 4 / 2 = 2 。从结构内部将int *array更改为int array[5],您将看到所需的结果。 -
@fvalasiad 嗯,我明白了。我实际上想让这个数组具有可变大小。有没有办法解决它,还是在 C++ 中通常是不可能的?
-
您想使用动态数组吗?如果是这种情况,请使用
std::vector。除非你的意思是你想自己创建一个动态数组,否则你应该在你的结构中添加一个size_t size属性来保存数组的大小并相应地动态重新分配内存。 -
@fvalasiad 数组在运行时不会改变,但我想要这个结构的几个实例,每个实例都有不同大小的数组。但包括
size属性对我有用。感谢您的帮助!
标签: c++ arrays pointers struct sizeof