数组求长度,用sizeof(数组名)

int arr[] = {1, 2, 3, 4};

sizeof(arr) = 16;

char arr[] = "abc";

sizeof(arr) = 4;

strlen(arr)=3

char arr[] = {'1', '2', '3'};

sizeof(arr) = 3;

strlen(arr)=3

注意:当数组作为函数参数传递当时候,表示当是指针,不能用sizeof(名称),求出来当是计算机字长。

### 如何用 `sizeof` 计算 C/C++ 中结构体数组长度 在 C 和 C++ 编程语言中,可以通过 `sizeof` 运算符来获取数据类型的大小以及数组的整体占用空间。对于结构体数组而言,要计算其长度通常需要结合单个结构体实例的大小来进行推导。 #### 方法一:通过已知的数组名和单个元素大小计算 如果已经知道整个数组的名字,并且该数组是在栈上分配或者作为静态存储,则可以直接利用以下公式: \[ \text{数组长度} = \frac{\text{sizeof(数组)}}{\text{sizeof(单个结构体元素)}} \] 具体代码如下所示: ```cpp struct Example { int a; double b; }; Example array[10]; int length = sizeof(array) / sizeof(array[0]); // 使用第一个元素代表单个结构体大小 ``` 这里需要注意的是,上述方法仅适用于编译期固定大小的数组[^1]。如果是动态分配的数组(例如通过 `malloc` 或者 `new` 创建),则无法直接应用此方式,因为在这种情况下,`sizeof` 只会返回指针本身的大小而不是实际分配的空间大小。 #### 方法二:记录动态分配时的信息 当涉及堆上的动态内存分配时,由于 `sizeof` 对于指向动态分配区域的指针总是返回固定的字节数(通常是 4 字节或 8 字节取决于平台架构),所以必须手动保存所请的项数以便稍后使用它来确定有效条目数量。 示例代码片段展示了一个可能的做法: ```cpp #include <iostream> using namespace std; struct Record { string name; int id; }; // 假设我们创建了 n 条记录 size_t n = 5; Record* records = new Record[n]; // 后续操作... delete[] records; // 清理资源前记得删除对象 ``` 在此场景下,变量 `n` 就是我们所需的逻辑意义上的“数组长度”。 另外值得注意的一点是关于 **零长度数组** 的特殊用途,在某些场合允许我们在结构体内定义灵活数组成员从而简化管理和减少冗余字段声明的需[^3][^4]。然而这种技术并不支持直接查询最终的实际容量,仍需额外维护计数值或者其他机制辅助完成这一目标。 最后提醒一下开发者们注意不同编译环境下可能存在差异化的默认填充策略影响到整体布局尺寸测量准确性等问题[^2]。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值