教你获取new出的数组大小

之前在网上没怎么看到获取数组大小的文章,现在给大家说一下自己的方法。
首先,C++new出的数组或者对象C++都是知道其内存大小的,既占用字节,而这个占用字节在哪儿呢,没错,就在变量地址 - 4个int占用字节的大小 = 存放new对象的占用字节(仅在64位环境下测试,32位也可以试试)。那么知道这个就简单了。

我们可以先获取到存放其占用字节的内存地址,内存地址 = (int*(对象指针)) - 4, 那么我们这样就拿到了存放字节大小的内存地址,如果要获取数组个数就更简单了,直接用字节大小 / 对象类型占用字节 = 数组个数。例:数组个数 = (*((int*(对象指针)) - 4)) / sizeof(对象类型), 这样我们就拿到了数组个数,是不是很简单

在C语言中,动态结构体数组大小通常是通过指针和内存分配函数(如`malloc()`或`calloc()`)来控制的,并不是直接设置固定的数组长度。当你需要创建一个可以改变大小的结构体数组时,通常会首先分配一块足够大的内存空间,然后根据需要动态地增加或减少元素的数量。 例如: ```c #include <stdio.h> #include <stdlib.h> typedef struct { int data; } DynamicStruct; void allocate(size_t size) { DynamicStruct* array = (DynamicStruct*) malloc(size * sizeof(DynamicStruct)); if (array == NULL) { printf("Memory allocation failed.\n"); return; } // 现在你可以使用array来存储结构体,每次添加元素都只需修改下一个空位置 } void addElement(DynamicStruct** array) { size_t currentSize = sizeof(*array) / sizeof(DynamicStruct); // 获取当前数组元素数量 DynamicStruct* newElement = realloc(array[currentSize], sizeof(DynamicStruct)); // 动态扩容 if (newElement != NULL) { newElement->data = /* 设置新数据 */; (*array) = newElement; // 更新指向新数组的位置 } else { printf("Memory reallocation failed.\n"); } } int main() { DynamicStruct* dynamicArray = NULL; allocate(10); // 初始分配10个元素的空间 // ... 使用和扩展动态Array ... return 0; } ``` 在这个例子中,`allocate()`函数用于初次分配内存,`addElement()`函数负责在数组的末尾添加新的元素并调整内存。重要的是要注意`realloc()`可能失败,此时程序应处理错误。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值