You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将数组传入sizeof()?兼析(int[])强制转换数组的原理

关于C语言复合字面量与数组长度计算的问题解答

1. 为什么(int[]) {1,2,3}能生效?

这不是强制转换,而是C99标准引入的复合字面量语法:

  • 字符串字面量"abc"本质是一个匿名char数组,编译器会自动将其转换成指向数组首元素的指针,所以char *arr = "abc"能直接生效。
  • 但单独的{1,2,3}不是合法表达式,无法直接赋值给指针。而(int[]) {1,2,3}的写法会创建一个匿名int数组(元素为1、2、3),这个数组会自动转换成指向首元素的指针,因此可以赋值给int *arr。

简单来说,这个语法是帮你临时创建了一个匿名数组,再转成指针供变量使用。

2. 如何用sizeof()正确获取元素个数?

问题出在arr是指针类型,sizeof(arr)得到的是指针的字节数(比如32位系统是4,64位是8),而非数组总字节数。要正确计算,得直接针对数组本身操作:

  • 方法一:直接对复合字面量计算
    int n = sizeof((int[]) {1,2,3}) / sizeof(int);
    
  • 方法二:将复合字面量赋值给数组变量(而非指针)
    int arr[] = (int[]) {1,2,3};
    int n = sizeof(arr) / sizeof(int);
    
    这里arr是数组类型,sizeof(arr)会返回数组总字节数,除以单个int的字节数就能得到元素个数。

如果已经把数组转成指针,就无法通过sizeof获取长度了,只能手动记录元素数量。

内容的提问来源于stack exchange,提问作者noname delete

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 00:24:17