sizeof(array) 在运行时如何工作?

2024-01-25

我读过,C 中的 sizeof 运算符是在编译时解释的,并且由于在编译时编译器知道数组大小及其类型,因此 sizeof 能够计算数组占用的字节数。但是 sizeof 如何适用于以下代码:

 #include<stdio.h>
 #include<string.h>
 int main()
 {
    int n;
    scanf("%d",&n);
    int a[n];
    int s=sizeof(a);
    printf("%d",s);
    return 0;
 }

这里数组的大小在编译时是未知的,那么它是如何正常工作的呢?


sizeof在 C89 中始终在编译时计算。从 C99 和可变长度数组开始,当可变长度数组是表达式中的一部分时,它是在运行时计算的sizeof操作数。

对于评价同样如此sizeof操作数:在 C89 中不求值,但在 C99 中如果操作数是可变长度数组类型,则对其求值。例如:

int n = 5;
sizeof (int [n++]); 

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

sizeof(array) 在运行时如何工作? 的相关文章

随机推荐

  • 在 Android studio 2.2.3 中找不到工具 > Firebase

    根据开发人员指南 https developer android com studio write firebase html https developer android com studio write firebase html 我
  • 验证库 (.lib) 中使用的 CRT

    如何检查 Windows 中的静态库 lib 链接到哪个运行时库 我正在使用 MDd 编译我的项目 并且我假设我链接到的库正在使用 MTd 多线程调试 Error 7 error LNK2005 public thiscall std Lo
  • 为什么我的手机无法访问电脑网络?

    我有一个问题 昨天我可以从手机访问我的计算机网络 但今天它不起作用 为什么会这样 我准备的东西 我已经使用 XAMPP 运行本地服务器 我已经开始Apache and MySQL 我通过 WIFI 连接到同一网络 我的手机是通过USB连接到
  • 在 IIS6 上使用 Decimal In Route 进行路由

    我的 MVC3 项目中有一条路线 当通过调试器和 IIS7 运行时 该路线在本地运行得非常好 但是 我们的服务器是 IIS6 当我将应用程序移出时 我收到 找不到页面 错误 我的猜测是这与路线中的小数有关 所以我尝试实现一个 RouteHa
  • 如何将参数传递给 webpack.config.js?

    我正在跟进these https www hipstercode com blog 27 指令基于this https github com vuejs templates webpack tree master template项目 官方
  • 在视图上创建全文索引时出现问题

    我有一个这样创建的视图 CREATE VIEW dbo vwData WITH SCHEMABINDING AS SELECT DataField1 DataField2 DataField3 FROM dbo tblData 当我尝试在其
  • 有时会出现模式关闭时的空白屏幕

    我有一个动态创建的表格 每行都有按钮 如果我单击按钮 模式将打开以输入模式后面带有黑屏的详细信息 单击接受按钮时 模式将关闭 黑屏必须消失 它有时会消失 但在其他情况下不会消失 这就是在模式中单击 接受 按钮后我的屏幕有时会出现的情况出现的
  • 无法调用基类的受保护函数?

    我无法在基类中调用受保护的函数 为什么 它看起来像这样 class B B2 public virtual f1 B 0 protected virtual f2 B codehere class D public B public vir
  • Matlab 中的相关可观测属性。有效吗?

    在 Matlab 类中 声明在语法上似乎是正确的property那是依赖者 计算未存储 和可观察的在同一时间 考虑代码 properties Access private instanceOfAnotherClass end propert
  • Android 上有时会忽略 LD_LIBRARY_PATH

    我有一个 Android 应用程序 它会生成许多与我随包分发的库动态链接的本机可执行文件 为了启动这些二进制文件 我使用 LD LIBRARY PATH 环境变量让它们知道从中加载库的位置 但在某些设备上这根本不起作用 LD LIBRARY
  • 如何将无头铬模块与AWS Lambda捆绑在一起?

    我尝试将 Puppeteer 与 Lambda 结合使用 但是 在无服务器部署中 由于超过 250mb 未捆绑包大小限制 Lambda 会出错 因此 为了突破限制 我改用了 Puppeteer 核心 它不包含铬 这需要引用可执行文件的路径来
  • 是否有库或其他方法可以进行 128 位数学运算?

    我正在编写一个加密应用程序 需要使用 128 位整数 除了标准的加 减 乘 除和比较之外 我还需要幂和模函数 有谁知道可以做到这一点的库或其他实现 如果不是 128 位 是否有 64 位选项可用 查看GNU 多精度算术库 http gmpl
  • 如何在react中为状态分配prop值

    我有一个覆盖层 它是从另一个 React 组件启动的 该组件有一个也会自行更改的按钮 当用户单击按钮时 更改就会发生 然后按钮会更改其类名 它还向作为覆盖层的子组件发送一个 prop 值 叠加层会根据属性以及是否单击添加一个类 一切都进展顺
  • 哪个 openid / oauth 库可将 django 项目连接到 Google Apps 帐户?

    我正在为一家使用 Google Apps 登录的公司开发一个 Intranet django 项目 不使用 GAE 所以我希望我的用户能够使用他们的 google 帐户登录来登录我的 django 项目 OpenID 似乎很合适 尽管也许
  • 在ggplot2中自定义“scale_color_gradient2”

    我想在我的图像图中使用我自己的特定颜色 我对 ggplot2 很陌生 所以看了它的手册here http docs ggplot2 org current scale gradient2 html 旧链接不存在 现在是here https
  • TFS 2005下永久删除

    如何永久删除 TFS 2005 源代码管理下的文件夹 文件 我知道关于tf destroy命令 但这仅适用于 TFS 2008 我也知道关于CodePlex 上的 TFS PowerPack http tfspowerpack codepl
  • 用于验证 Active Directory 对象 SID 的正则表达式

    我正在寻找一种方法来验证从 Active Directory 插入的对象 SID 是否有效 是否可以使用preg match or preg match all 我在网上查找了用于此验证的正则表达式 但我找不到任何东西 Example si
  • Swift UIAlertController,文本中带有 url

    我有这个代码 func alertBox txt String let ac UIAlertController title MyTtle message More information in my website preferredSt
  • Select2 占位符问题

    我有一个 Select2 多选 html 元素 渲染时不显示占位符 但如果我选择并删除该项目 则会显示占位符 我不知道如何让它发挥作用 请指教 最初 选择时 移除物品后 Code Html DropDownListFor m gt m Ve
  • sizeof(array) 在运行时如何工作?

    我读过 C 中的 sizeof 运算符是在编译时解释的 并且由于在编译时编译器知道数组大小及其类型 因此 sizeof 能够计算数组占用的字节数 但是 sizeof 如何适用于以下代码 include