数组和指针的大小

2023-12-25

这是我的示例代码

#include<stdio.h>
void main()
{
 int arr[]={1,2,3,4,5,6};
 char *ptr,a;
 a='c';
 ptr=&a;
 int *ptr1,a1;
 a1=4;
 ptr1=&a1;
 printf("%d  %d   %d",sizeof(arr), sizeof(ptr1), sizeof(ptr));
}

现在,据我了解, size of 将告诉我存储变量所需的大小,现在这个的输出是

24 4 4

为什么尺寸是arr=24,毕竟它只是一个指针,它应该有 size =4 ?

Thanks.


“……毕竟这只是一个指针……”?不,数组不是指针。数组是一个数组对象:存储数组元素的固体连续内存块,不涉及任何类型的指针。在你的例子中,数组有 6 个元素,每个元素的大小为 4。这就是为什么你的sizeof评估为 24。

关于数组是指针的常见误解已经被揭穿了数百万次,但不知怎的,它仍然时不时地出现。阅读常见问题解答,如果您有任何疑问,请回来

http://c-faq.com/aryptr/index.html http://c-faq.com/aryptr/index.html

附:正如@Joachim Pileborg 在他的回答中正确指出的那样,sizeof不是一个函数。它是一个运算符。


数组与指针的行为不同的另一个上下文是一元&运算符(“地址”运算符)。当一元&应用于类型的指针int *is 产生一个类型的指针int **。当一元&应用于类型数组int [10]is 产生一个类型的指针int (*)[10]。这是两种截然不同的类型。

int *p = 0;
int a[10] = { 0 };

int **p1 = &p;      /* OK */
int **p2 = &a;      /* ERROR */
int (*p3)[10] = &a; /* OK */

这是问题(和错误)的另一个常见来源:有时人们期望&生产一个int **应用于指针时int [10] array.

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

数组和指针的大小 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • IE 兼容性问题:

    内的

    我有以下 HTML CSS 其中只有一个 span 标签样式为float right里面一个 h2 tag h2 H2 Test span SPAN text span h2 在 Firefox 上一切都运行良好 我怀疑其他好的浏览器 如

  • 带 2 补码的二进制减法

    我需要帮助使用 2 的表示形式进行二进制减法 并为每个数字使用 5 位 1 9 7 有溢出吗 9 01001 2 的补码 10111 和 7 00111 2 的补码 11001 现在我们需要添加 因为我们使用的是 2 的补码 10111 1
  • centos 7安装pymssql时出错

    我在虚拟机 Centos 7 中安装 pymssql 时遇到了这个问题 我安装的python版本是2 7 6 用于安装 pymssql 的命令 pip intall pymssql 错误信息 root dpitstsvr013 magend
  • 有没有办法对 Powershell cmdlet 的结果进行自动换行?

    简单 可能是愚蠢 的问题 我是 Powershell 新手 主要使用它来实例化托管库 因此当我需要使用其中的成员时 我不必编写小应用程序 其中一些库很旧 并且其方法签名又长又痛苦 在使用 new object 实例化后使用 get memb
  • 我可以使用哪些 March/mtune 选项?

    有没有办法让 gcc 输出可用的 march arch 选项 我遇到构建错误 尝试过 march x86 64 我不知道我的选择是什么 我使用的编译器是 gcc 的专有包装器 它似乎不喜欢 march skylake 标志应该是相同的 所以
  • 如何用XMPP实现聊天列表

    我有 Ejabberd 服务器和移动 iOS Android 应用程序 我想构建一个简单的聊天应用程序 有两个屏幕 聊天列表 带有特定聊天消息的屏幕 我对聊天列表的实现有疑问 我用XEP 0313 消息存档管理 https xmpp org
  • 在 Android Studio 中,构建 Android Wear 项目,如何在两个模块中包含相同的文件

    我成功地在移动设备上构建了 Android Wear 表盘和连接的应用程序 问题是我有几个资源和类文件在两个文件中都被引用mobile and wear模块 我构建这个的骨架应用程序还创建了一个 非构建 DigitalWatch模块 我猜我
  • WebDav 请求的 Httphandler

    我正在尝试编写一个 asp net httphandler 来使用 IIS 处理 webdav 请求 我正在扩展 IHttpHandler 接口并实现 ProcessRequest public class clsMyHandler IHt
  • 更改 TabNine 在建议窗口中的优先级

    我在 VSCode 中使用 TabNine 已经有一段时间了 它非常棒 除了当我必须选择函数 其他名称而不是 TabNine 的建议时 My question is Can we change any setting such that a
  • WebAssembly 使用什么引擎?

    在 Chrome 中 JavaScript 运行在 V8 引擎上 但是运行 WebAssembly 代码的引擎是什么 浏览器如何突然能够通过 WebAssembly 提供改进的性能 此 WebAssembly 引擎在浏览器中始终可用 还是最
  • 将字符串保存到文件

    我有一个迭代 在我看来 email protected cdn cgi l email protection i each do i doing things bigtable lt lt result 0 result length 2
  • .well 类中的垂直居中 bootstrap btn

    我有一个链接 我想将其垂直居中 well来自引导框架的类并且正在使用该类btn btn danger在锚标签上 这是下面的图片 我尝试使用vertical align middle 但这似乎不起作用 您可以看到井上的空间甚至不包括顶部和底部
  • 代码隐藏中带有转换器的数据模板

    我正在尝试在代码隐藏中加载 DataTemplate 但是如果我删除转换器 它就可以正常工作 但是一旦我将其放入其中 它就会崩溃 现在 我确实将我的状态设置为我的命名空间 并将对我的转换器的引用放置在 XAML 中 例如
  • 带有调试输出的 X3 解析器段错误 (BOOST_SPIRIT_X3_DEBUG)

    Update 这个问题涉及两个问题 如接受的答案 https stackoverflow com a 43688320 2428220 这两个问题都存在于 Boost Spirit X3 随 Boost 1 64 一起提供的版本中 但在撰写
  • 在 VS2015 Update 3 中构建 OpenCV 3.2 时,xtr1common 中出现大量错误

    在 Visual Studio 2015 Update 3 中使用 OpenCV 3 2 和目标 x64 3 2 版本中没有 x86 库 构建简单的 OpenCV 应用程序时 出现以下错误 1 gt c program files x86
  • git-flow 完成发布 - 选择性合并

    我们最近开始使用git flow在我们公司 我们遇到了以下问题 我们有一个DEV MODE控制应用程序中日志记录级别的布尔值 我们希望开发分支始终具有DEV MODE true 但是 当发布版本时 我们更改了DEV MODE to fals
  • 自定义CRS:如何让传单比例控件显示mm(毫米)和um(微米)

    有没有办法让传单显示小于一米的值 例如 刻度控件上的 mm 毫米 或 um 微米 或者是否有一个插件可以做到这一点 我有一个带有自定义 CRS 的自定义地图 该 CRS 使用虚拟显微镜图像 我使用以下代码创建一个值小于一米的地图 但是比例控
  • log4Net 配置转换

    我能够转换我的 log4net config 但我没有得到这个 如何更改以下连接字符串
  • 在 Razor @Html.EditorFor 中使用文化设置日期格式

    MVC 4 C 在我的剃刀视图中 我有 Html EditorFor model gt model ActionObject StartDate 在我的模型中注释为 DataType DataType Date DisplayFormat
  • 数组和指针的大小

    这是我的示例代码 include