数组和指针的大小

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(使用前将#替换为@)

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

  • 是否保证 sizeof(T[N]) == N * sizeof(T) ?

    我一直假设 N 个元素类型的数组的大小T 由返回sizeof保证正好是N次sizeof T The 对这个问题的评论 https stackoverflow com questions 46457449 is it always the c
  • 线程独占数据:如何存储和访问?

    NET 中是否有可能将对象实例绑定到线程的当前执行上下文 这样在代码的任何部分我都可以做类似的事情CurrentThread MyObjectData DoOperation 并确保我访问特定于线程的数据 谢谢 你可以看一下线程静态属性 h
  • 如何转发声明要在 unique_ptr 的标准容器中使用的类

    在智能指针的标准容器中使用它时 是否可以避免完整的类定义可见 例如 我无法编译以下内容 include
  • 命名管道客户端无法连接到作为网络服务运行的服务器

    我有一个服务在网络服务帐户下运行 该服务只是设置一个命名管道并侦听连接 NamedPipeServerStream listeningPipe new NamedPipeServerStream ourservicepipe PipeDir
  • C语言实现延时函数

    我想使用空循环实现延迟函数 但是完成一次循环所需的时间取决于编译器和机器 我希望我的程序自行确定时间并将程序延迟指定的时间 谁能给我任何想法如何做到这一点 注意 有一个名为delay 的函数可以将系统暂停指定的毫秒 是否可以在不使用此功能的
  • 如何用另一个静态变量初始化一个静态变量?

    静态1 hpp include
  • Monitor.Pulse & Wait - 意外行为

    http www codeproject com Articles 28785 Thread synchronization Wait and Pulse demystified http www codeproject com Artic
  • .NET 中的 Class.forName() 等效项?

    动态获取对象类型然后创建它的新实例的 C 方法是什么 例如 如何在 C 中实现以下 Java 代码的结果 MyClass x MyClass Class forName classes MyChildClass newInstance Lo
  • C 中的 '\0' 和 printf()

    在 C 入门课程中 我了解到在存储字符串时存储空字符 0在它的最后 但是如果我想打印一个字符串怎么办 printf hello 虽然我发现它并没有结束 0通过以下声明 printf d printf hello Output 5 但这似乎不
  • C 链表销毁函数

    我正在尝试学习 C 和很多人一样 我对指针有点困惑 无论如何 我创建了一个递归函数来销毁我的链表 但是正如我调试的那样 当我从函数返回时 列表的头部不应该为空 所以我猜这是对指针的一些基本误解 这是函数 void destroy struc
  • 使用 LINQ 展平嵌套字典

    所以我有一本形式的字典Dictionary
  • UI 线程正在阻塞调用 COM 对象的后台线程

    我正在开发一个通过第三方 COM 库与外部设备通信的应用程序 我试图让与设备的所有通信都通过后台线程 以防止通信问题搞砸我的应用程序 并消除在 UI 线程中进行通信所引入的一些其他复杂性 问题是 每当发生导致主 UI 线程阻塞的情况 即调用
  • 用 OpenCL C 编写快速线性系统求解器

    我正在编写一个 OpenCL 内核 它将涉及求解线性系统 目前我的内核太慢了 提高线性系统部分的性能似乎是一个不错的起点 我还应该注意 我并没有尝试使我的线性求解器并行 我正在研究的问题在宏观层面上已经是令人尴尬的并行 以下是我编写的 C
  • 解析连接字符串

    是否有标准库或代码片段可以使用这样的连接字符串获取值 string connstr DataServiceUrl http localhost foo RemoteServerConnection server http localhost
  • “DeploymentItem”属性是什么意思?

    假设我们有一个简短的程序 namespace ConsoleTryIt static class Program static void Main string args var sum Add 1 2 private static int
  • 当一对迭代器初始化时,向量是否知道先保留?

    考虑以下代码 struct MyData MyData const BYTE pData size t uSize bucket pData pData uSize std vector
  • Rx 在不同的线程上生产和消费

    我试图通过此处的示例代码来简化我的问题 我有一个生产者线程不断地输入数据 并且我尝试在批次之间添加时间延迟来对其进行批处理 以便 UI 有时间渲染它 但结果并不如预期 生产者和消费者似乎在同一个线程上 我不希望批处理缓冲区在正在生成的线程上
  • 使用“const cv::Mat &”、“cv::Mat &”、“cv::Mat”或“const cv::Mat”作为函数参数的区别?

    我已经彻底搜索过 但没有找到一个简单的答案 传递 opencv 矩阵 cv Mat 作为函数的参数 我们传递一个智能指针 我们对函数内部的输入矩阵所做的任何更改也会改变函数范围之外的矩阵 我读到 通过将矩阵作为 const 引用传递 它不会
  • NSubstitute - 测试特定的 linq 表达式

    我在当前正在开发的 MVC 3 应用程序中使用存储库模式 我的存储库界面如下所示 public interface IRepository
  • 为什么我无法通过 lambda 捕获“this”指针?

    考虑以下代码 class A public void foo auto functor this A a this auto functor a The compiler won t accept this instead of a a g

随机推荐

  • 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