sizeof 在可变长度数组上的行为(仅限 C)

2024-02-01

我的问题是具体如何sizeof()当传递的参数是动态数组可变长度数组时的行为。

让我们考虑一个例子:

int fun(int num_of_chars)
{
    char name_arr[num_of_chars] = {0};

    /* Do something*/

    return sizeof(name_arr);
}

在此示例中,很明显返回值不是编译时常量。因为大小取决于运行时值num_of_chars.

引用C99标准(6.5.3.4):

The sizeof运算符产生其操作数的大小(以字节为单位),这可能是 表达式或带括号的类型名称。尺寸由下式确定 操作数的类型。结果是一个整数。如果操作数的类型是 变长数组类型,对操作数进行求值;否则,操作数是 未计算,结果是整数常量。

我从 [....操作数被求值...] 中可以理解的是,当参数传递给sizeof()是一个动态数组可变长度数组,sizeof()“表现得像”函数而不是运算符.

我的理解对吗?


它仍然表现为一个操作符。 Cast 也是运算符,也评估它的参数,也是如此* or &。作为一个运算符是一个语法范畴。这并没有改变。

重要的区别在于它的行为如下表达而在其他情况下,它的行为如下constant.


更新:我在下面评论说我不明白为什么评估会有所不同,但现在我意识到有two可以用可变长度数组编写 sizeof 的方法。您可以传递声明为可变长度数组的变量:

int a[x];
sizeof(a)

在这种情况下评估a确实没有什么区别。但您也可以使用type作为论点,这将是

sizeof(int[x])

在这种情况下,结果是x * sizeof(int) and x必须进行评估。我想这就是规范中提到它的原因。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sizeof 在可变长度数组上的行为(仅限 C) 的相关文章

  • 向进度条添加百分比文本 C#

    我有一个方法可以显示进程栏何时正在执行以及何时成功完成 我工作得很好 但我想添加一个百分比 如果完成 则显示 100 如果卡在某个地方 则显示更少 我在网上做了一些研究 但我无法适应我正在寻找的解决方案 这是我的代码 private voi
  • 如何让 Swagger 插件在自托管服务堆栈中工作

    我已经用 github 上提供的示例重新提出了这个问题 并为任何想要自己运行代码的人提供了一个下拉框下载链接 Swagger 无法在自托管 ServiceStack 服务上工作 https stackoverflow com questio
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • C中的malloc内存分配方案

    我在 C 中尝试使用 malloc 发现 malloc 在分配了一些内存后浪费了一些空间 下面是我用来测试 malloc 的一段代码 include
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

    我创建了一个自定义库 它会自动为依赖于特定服务的 Polly 策略设置HttpClient 这是使用以下方法完成的IServiceCollection扩展方法和类型化客户端方法 一个简化的例子 public static IHttpClie
  • 在 Visual Studio 2010 中从 Fortran 调用 C++ 函数

    我想从 Fortran 调用 C 函数 为此 我在 Visual Studio 2010 中创建了一个 FORTRAN 项目 之后 我将一个 Cpp 项目添加到该 FORTRAN 项目中 当我要构建程序时出现以下错误 Error 1 unr
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • 在一个平台上,对于所有数据类型,所有数据指针的大小是否相同? [复制]

    这个问题在这里已经有答案了 Are char int long 甚至long long 大小相同 在给定平台上 不能保证它们的大小相同 尽管在我有使用经验的平台上它们通常是相同的 C 2011 在线草稿 http www open std
  • 我可以使用 moq Mock 来模拟类而不是接口吗?

    正在经历https github com Moq moq4 wiki Quickstart https github com Moq moq4 wiki Quickstart 我看到它 Mock 一个接口 我的遗留代码中有一个没有接口的类
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • Oracle Data Provider for .NET 不支持 Oracle 19.0.48.0.0

    我们刚刚升级到 Oracle 19c 19 3 0 所有应用程序都停止工作并出现以下错误消息 Oracle Data Provider for NET 不支持 Oracle 19 0 48 0 0 我将 Oracle ManagedData

随机推荐

  • Robot Framework调用的测试如何将信息返回到控制台

    我有一个调用 python 方法的机器人框架测试套件 我希望 python 方法能够将消息返回到控制台而不会导致测试失败 具体来说 我正在尝试计算一个过程的时间 我可以使用 raise 将消息返回到控制台 但同时测试失败 def doSom
  • Spring-mvc控制器和异常处理

    想问您一个有关 spring mvc 控制器的最佳实践问题 请查看下面的代码 Autowired SomeService service RequestMapping public ResponseBody Response createS
  • 将文本添加到 android 可绘制 xml

    我正在尝试使用 android 可绘制 xml
  • 访问网络应用程序中文件的内容而不上传

    据我所知 如果不先上传到服务器 然后重新下载给用户 就不可能在网络应用程序中访问用户计算机上的文件内容 除非使用某种插件 Flash等 理想情况下 用户将文件直接上传到本地存储 然后脚本将有机会处理 显示 验证 过滤 而无需用户等待上传 即
  • Spring:如何在Web应用程序和独立程序中获取应用程序上下文

    我是 Spring 框架的新手 我们想在Web应用程序中引入它 3 1 目前在Web层使用struts 在业务层使用服务外观和业务对象 在持久层使用自编写的JDBC DAO 所有这些都是紧密耦合的 我创建了几个 xml 配置 其中一个用于
  • Python pandas 从一列字符串的数据选择中过滤掉 nan

    不使用groupby我如何过滤掉数据而不NaN 假设我有一个客户将填写的矩阵 N A n a 或其任何变体和其他变体将其留空 import pandas as pd import numpy as np df pd DataFrame mo
  • 将大文件读入 R

    我是 R 的新手 但我知道它会因 大 文件而窒息 我正在尝试读取 200MB 的数据文件 我已经尝试过 csv 格式 并将其转换为制表符分隔的 txt 但在这两种情况下 我在文件加载之前就用完了 4GB RAM R 使用 4GB 或内存来加
  • VirtualBox 上的 Android x86:Android 已连接但不在线

    我正在尝试使用 Oracle VirtualBox 配置 Android x86 运行机器 以便它可以与 Eclipse 一起使用 我在使我的虚拟机 在线 时遇到一些麻烦 我通过在 Android 终端模拟器中键入以下内容将手机连接到 ad
  • 检查元组中的元组中是否存在元素

    我有一个元组列表 如下所示 CODES apple reddelicious caramel sweetsticky banana yellowfruit 检查该元组中是否存在值的最佳方法是什么 例如我希望能够说 apple in CODE
  • 清理 PHP 中的文件路径

    我希望确保我的小程序的安全 以便潜在的恶意用户无法查看服务器上的敏感文件 path home gsmcms public html central app webroot GET file if file exists path echo
  • Azure DevOps 管道中存在不明确的参数“HEAD^”

    我在网上看到很多示例如何在 CI 中的 Azure DevOps 管道期间获取更改文件 只需使用简单的代码 changedFiles git diff name status HEAD HEAD 但是当我尝试在 yaml 管道中使用它时出现
  • 蚂蚁的战斗策略

    这个问题是指谷歌赞助的人工智能挑战 http aichallenge org 每隔几个月举行一次的竞赛 参赛者需要提交一个能够自主与其他机器人玩家玩游戏的机器人 刚刚结束的比赛名为 蚂蚁 您可以阅读其所有规范here http aichal
  • 使用 LINQ 进行现有查询

    我想使用 LINQ 获取员工列表 这些员工必须在TypeOfWorks列出typeofWork通过 Id 在论证中 public class Employee public virtual IList
  • Codeigniter - 使用 set_value() 填充表单进行编辑(不涉及 POST)

    我有一个包含表单的视图 带有输入字段和单选按钮 该表单需要填充数据库中的数据 以便将其用作数据编辑表单 我已使用 set value 函数进行表单验证 其中在发布后从同一控制器调用视图 但是如何在没有 POST 的情况下使用 set val
  • 加速 Numpy 数组/OpenCV cv2 图像的迭代

    我有 3 个形状 gt 500 500 的 numpy 数组 我正在尝试同时迭代它们 我尝试了两种不同的方法 但都很慢 Here Ix Ix blur Ix Iy blur and Iy Iy blur大小相同 我正在尝试寻找特征并将其绘制
  • 将 JSON jQuery Ajax 发送到 PHP 并返回

    我在通过 Ajax 将 JSON jQuery 数组发送到 PHP 脚本时遇到问题 这里有什么问题 var tee voting image img attr id var vote 1 var thing tee tee vote vot
  • 为kendo数据源提供一个角度范围变量

    我目前正在尝试用远程数据填充剑道网格 Kendo 有它自己的函数来获取数据 但我想使用我创建的角度工厂 所以我有一个工厂 它有一个函数 getSkills 该函数从我的api获取所有技能对象 angular module MyApp fac
  • 最佳实践 - 从 Web 服务抛出异常

    我们有一个 ASMX Web 服务 我们使用 ajax jQuery 从 ASP NET 应用程序调用它 我们的网络方法的典型示例如下 WebMethod public void DoSomething BusinessObject myP
  • git-svn 忽略大型二进制文件

    我正在使用一个大型 svn 存储库 超过 30 000 个修订版 我使用 git svn 的成功有限 我的主要问题是 svn 存储库包含对大型二进制文件 30MB 的频繁更新 我不关心这些文件的历史记录 但我确实关心这些文件的当前版本 如果
  • sizeof 在可变长度数组上的行为(仅限 C)

    我的问题是具体如何sizeof 当传递的参数是动态数组可变长度数组时的行为 让我们考虑一个例子 int fun int num of chars char name arr num of chars 0 Do something retur