指针数组的大小

2024-02-28

我对 sizeof 运算符有疑问

Code 1:

int main()
{
    int p[10];
    printf("%d",sizeof(p));   //output -- 40
    return 0;
}

Code 2:

int main()
{
    int *p[10];
    printf("%d",sizeof(*p));   //output -- 4
    return 0;
}

在第一个代码中,p 指向一个整数数组。 在第二个代码中,p 指向一个指针数组。 我无法理解为什么第一个代码 o/p 是 40 但第二个代码 o/p 是 4 认为两者都指向相同大小的数组?


以下程序的输出将为您提供有关类型的大小和类型指针的一些提示和理解。

#include <stdio.h>

int main(void)
{
    int p1[10];
    int *p2[10];
    int (*p3)[10];

    printf("sizeof(int)   = %d\n", (int)sizeof(int));
    printf("sizeof(int *) = %d\n", (int)sizeof(int *));
    printf("sizeof(p1)    = %d\n", (int)sizeof(p1));
    printf("sizeof(p2)    = %d\n", (int)sizeof(p2));
    printf("sizeof(p3)    = %d\n", (int)sizeof(p3));

    return 0;
}

int p[10];      => 10 consecutive memory blocks (each can store data of type int) are allocated and named as p

int *p[10];     => 10 consecutive memory blocks (each can store data of type int *) are allocated and named as p

int (*p)[10];   => p is a pointer to an array of 10 consecutive memory blocks (each can store data of type int) 

现在回答你的问题:

>> in the first code p points to an array of ints.
>> in the second code p points to an array of pointers.

你是对的。代码中:2、要获取p指向的数组大小,需要传入基地址

printf("%d", (int)sizeof(p));

而不是以下内容

printf("%d", (int)sizeof(*p));   //output -- 4

以下是等效的:

*p, *(p+0), *(0+p), p[0]

>> what's the difference between p[10] and 
>> (*p)[10]...they appear same to me...plz explain

以下是您的另一个问题的回答:

int p[10];
 _________________________________________
|   0   |   1   |   2   |         |   9   |
| (int) | (int) | (int) |  ...    | (int) |
|_______|_______|_______|_________|_______|


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

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

  • 为什么 F# 的默认集合是排序的,而 C# 的不是?

    当从 C 世界迁移到 F 最惯用的可能 思维方式时 我发现了这个有趣的差异 在 C 的 OOP mutable 世界中 默认的集合集合似乎是HashSet https learn microsoft com en us dotnet api
  • 在路由mvc 4中添加公司名称

    我一直在尝试为 Facebook 等用户提供在 URL 中添加公司名称的选项 http localhost 50753 MyCompany Login 我尝试过不同的网址 但没有成功 routes MapRoute name Default
  • 解析 JWT 令牌以仅获取有效负载内容,无需 C# 或 Blazor 中的外部库

    我正在使用 Blazor 编写可以访问 JWT 的客户端应用程序 我想知道一种简单的方法来读取令牌有效负载内容而不添加额外的依赖项 因为我不需要其他信息 也不需要验证令牌 我认为解析有效负载内容应该足够简单 只需将其写入方法即可 JwtTo
  • linq 中使用字符串数组 c# 的 'orderby'

    假设我有一个这样的方法定义 public CustomerOrderData GetCustomerOrderData string CustomerIDs var query from a in db Customer join b in
  • 运行需要 MySql.Data 的内置 .NET 应用程序

    我在运行我编写的内置 NET 应用程序时遇到问题 我的应用程序使用最新的 MySql 连接器 该连接器安装在我的系统上 当我尝试将其添加为引用时 该连接器显示为 NET 4 Framwork 组件 当我在环境中以调试模式运行应用程序时 一切
  • 使用 LINQ 更新 IEnumerable 对象的简单方法

    假设我有一个这样的业务对象 class Employee public string name public int id public string desgination public int grade List
  • 获取 boost Spirit 语法中的当前行

    我正在尝试使用 boostspirit 获取正在解析的文件的当前行 我创建了一个语法类和结构来解析我的命令 我还想跟踪在哪一行找到命令并将其解析到我的结构中 我将 istream 文件迭代器包装在 multi pass 迭代器中 然后将其包
  • C# 编译器不会优化不必要的强制转换

    前几天 在写答案的时候这个问题 https stackoverflow com questions 2208315 why is any slower than contains在这里 关于溢出 我对 C 编译器感到有点惊讶 它没有按照我的
  • 如何在三个 IEnumerable 上使用 Zip [重复]

    这个问题在这里已经有答案了 可能的重复 使用 Linq 从 3 个集合创建项目 https stackoverflow com questions 5284315 create items from 3 collections using
  • 使用具有抗锯齿功能的 C# 更改抗锯齿图像的背景颜色

    我有一个图像需要更改背景颜色 例如 将下面示例图像的背景更改为蓝色 然而 图像是抗锯齿的 所以我不能简单地用不同的颜色替换背景颜色 我尝试过的一种方法是创建第二个图像 仅作为背景 并更改其颜色并将两个图像合并为一个图像 但是这不起作用 因为
  • 引用/指针失效到底是什么?

    我找不到任何定义指针 引用无效在标准中 我问这个问题是因为我刚刚发现 C 11 禁止字符串的写时复制 COW 据我了解 如果应用了 COW 那么p仍然是一个有效的指针并且r以下命令后的有效参考 std string s abc std st
  • 为什么 Cdecl 调用在“标准”P/Invoke 约定中经常不匹配?

    我正在开发一个相当大的代码库 其中 C 功能是从 C P Invoked 的 我们的代码库中有很多调用 例如 C extern C int stdcall InvokedFunction int 使用相应的 C DllImport CPlu
  • 如何使用 NPOI 按地址(A1、A2)获取 Excel 单元格值

    我有一个 Excel 单元格地址 例如 A1 A2 如何使用 C 中的 NPOI 框架以编程方式访问此单元格 我找到的一些 Java POI 示例代码 CellReference cr new CellReference A1 row my
  • 使用 GCC 生成可读的程序集?

    我想知道如何使用GCC http en wikipedia org wiki GNU Compiler Collection在我的 C 源文件中转储机器代码的助记符版本 这样我就可以看到我的代码被编译成什么 你可以使用 Java 来做到这一
  • 英文日期差异

    接近重复 如何计算相对时间 https stackoverflow com questions 11 how do i calculate relative time 如何在 C 中计算某人的年龄 https stackoverflow c
  • 为什么以下 C 程序会出现总线错误?

    我认为这是第一个失败的 strtok 调用 好久没写C了 有点不知所措 非常感谢 include
  • 使用 using 声明时,非限定名称查找如何工作?

    根据 C 标准 这是格式错误还是格式良好 namespace M struct i namespace N static int i 1 using M i using N i int main sizeof i Clang 拒绝它 GCC
  • 来自 3rd 方库的链接器错误 LNK2019

    我正在将旧的 vc 6 0 应用程序移植到 vs2005 我收到以下链接器错误 我花了几天时间试图找到解决方案 错误LNK2019 无法解析的外部符号 imp 创建AwnService 52 在函数 public int thiscall
  • 如何使用placement new重新初始化该字段?

    我的课程包含字段 private OrderUpdate curOrderUpdate 我一遍又一遍地使用它 经常需要重新初始化 for int i 0 i lt entries size i auto entry entries i ne
  • 使用 numpy 加速 for 循环

    下一个 for 循环如何使用 numpy 获得加速 我想这里可以使用一些奇特的索引技巧 但我不知道是哪一个 这里可以使用 einsum 吗 a 0 for i in range len b a numpy mean C d e f b i

随机推荐

  • MySQL 匹配 - 在布尔模式下?

    我正在使用 PDO 执行 MATCH AGAINST 查询 以下内容不返回任何内容 SELECT title author isbn MATCH title isbn AGAINST term AS score FROM books WHE
  • 将txt转换为xlsx的Powershell脚本

    我想将文本文件转换为 Excel 格式 我使用来自 Technet 的以下脚本 Script name ConvertTilde ps1 Created on 2007 01 06 Author Kent Finkle Purpose Ho
  • 使用鼠标选择日期时,JQuery UI Datepicker 失去焦点

    我将 JQuery ui 与日期选择器一起使用 当用户点击某个字段时 他们会适当地弹出日历 用户选项卡 通过按键进入字段 用户通过鼠标单击选择日期 用户选项卡 Tabindex 从 1 开始 在表单的开头 这是代码 也可能设置选项卡索引
  • 如何创建很棒的字体图标的禁用状态?

    我正在使用很棒的字体图标 并且我需要使图标处于禁用状态 有什么办法可以做到这一点吗 我也在使用引导程序 这就是我使用图标的方式 i class fa fa slack i i 我只需要图标看起来像灰色的 为残疾人编写一个自定义类 就像是 f
  • 单元测试期间 Ada 中的异常处理

    我正在尝试为我最近编写的一些 Ada 代码编写一些单元测试 我有一个特殊的情况 我希望得到一个异常 如果代码工作正常 我不会 但在这种情况下我所做的只是测试 而不是编写代码 如果我在测试例程中处理异常 那么我不知道如何继续在该过程中进行测试
  • R/shiny + mathjax,不渲染数学

    我的行为很奇怪MathJax and shiny 我已经修改了01 hello示例来自shiny包包括一个 Rmd文件通过includeMarkdown 我修改的只是ui R如下 Show a plot of the generated d
  • 在我的 CentOS 机器上找不到wireshark init.lua

    所以我试图在我的 CentOS 7 服务器上获取一个与 tshark 一起使用的脚本 但我遇到了问题 该脚本在我的Windows笔记本电脑上运行良好 我只是将其放在appdata的plugins文件夹中 但我在linux上找不到类似的位置
  • 如何检索泛型方法的名称,包括泛型类型名称

    In C 我有一个具有以下签名的方法 List
  • 如何设置内容类型标头以响应 Pyramid Web 框架中的特定文件类型

    我正在使用金字塔网络框架来构建一个网站 我不断在 Chrome 控制台中收到此警告 资源解释为字体 但使用 MIME 类型 application octet stream 传输 http static images fonts font
  • Draw.io XML 文件的格式?

    我在 draw io 中创建了一个形状并将其导出以获取其 XML 文件 如下所示
  • 如何将 gRPC 定义的 API 引入 Web 浏览器

    我们想要为我们的 gRPC 微服务构建一个 Javascript HTML gui 由于浏览器端不支持 gRPC 我们想到使用 web sockets 连接到 node js 服务器 该服务器通过 grpc 调用目标服务 我们努力寻找一个优
  • 在 php 中使用 isset() 而不是 @ 是否有任何重要原因

    所以我正在努力清理一个可怕的代码库 并且我正在慢慢转向完整的错误报告 这是一个艰巨的过程 有数百条通知 内容如下 Notice Undefined index incoming in path to code somescript php
  • libgdx 将窗口定位在舞台之外

    我想知道如何使用 MoveToAction 或任何方法 将 scene2d 窗口定位在舞台之外 我希望菜单能够滑入和滑出 我的舞台和皮肤存储在我的世界级中 这些方法目前工作正常 但根本没有动画效果 Window window new Win
  • AVPlayer无法播放

    我想用 AVPlayer 播放远程 mp3 我无法让它工作 我也看不出它不起作用的原因 代码 NSString urlstr some link to a mp3 NSURL url NSURL URLWithString urlstr s
  • GS1-128条码解析

    扫描仪型号 Motorola DS4208 HC 我们需要解析 GS1 128 条形码 我们知道他们将使用 GTIN 01 批号 10 有效期 17 序列号 21 输入字符串 01 07612345678900 17 100503 10 A
  • 如何避免单个像素线在wpf中消失?

    我使用路径element StrokeThickness 1 SnapsToDevicePixels True 在网格中 我想调整窗口大小 Grid 元素被 Viewbox 元素包裹 Problem 当我调整窗口大小时 路径有时会消失 如果
  • 使用导航组件时从子级获取父级片段

    我需要将数据从一个片段传输到另一个片段 现在推荐的方法是使用共享ViewModel 为了在两个片段中获得相同的实例 需要共同的所有者 因为这可能是他们的共同点Activity 但通过这种方法 在单一活动的情况下 ViewModel实例将存在
  • 跨浏览器自定义复选框

    I have HTML and CSS我用来构建自定义复选框的代码 我相信我的代码具有正确的网络工具包 但它似乎不适用于 FireFox 这是代码 HTML
  • Delphi 带有 HTML/CSS 界面

    我想开发一个带有 HTML CSS 图形用户界面的 delphi 应用程序 不一定在 Web 浏览器中运行 我想这样做 创建一个更丰富的带有动画等的图形用户界面 并摆脱正常的 VCL 组件 Windows 外观 有什么建议么 HTML 和
  • 指针数组的大小

    我对 sizeof 运算符有疑问 Code 1 int main int p 10 printf d sizeof p output 40 return 0 Code 2 int main int p 10 printf d sizeof