热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

运算符大小反转行为

如何解决《运算符大小反转行为》经验,为你挑选了1个好方法。

我们知道,当我们使用数组时,它保存第一个元素的地址,而&array是存储整个数组地址,当我在printf中使用它时为true,但在sizeof运算符中,这是相反的行为,为什么

我在Windows 7上使用带有GCC的代码块

 int main(void)
  {
    int c[5];
      printf(" %d  %d  %d  %d\n",c,c+1,&c,&c+1);\\when we add 1 in "c" it add more 4 bytes and when "&c+1" it add 20 byte witch is true

       printf(" %u  %u ",sizeof(c),sizeof(&c));\\But when we print first element size (with "c") it give 20 byte and when print (With "&c") whole arry size it give 4 byte


         return 0;
            }

\我不明白为什么请解释



1> Sourav Ghosh..:

我认为您在这里需要知道的&array仍然是一个指针,只是类型有所不同。

对于像这样的数组 int arr[]={4,3,2,1,0}

在大多数情况下,arr与相同&arr[0],即,int *但对于sizeof算子,其行为有所不同(请参见下面的注释)。当传递给sizeof运算符时,它为您提供整个数组的大小,即sizeof(int [4])在这种情况下。

&arr是类型int (*)[4],它是一个指针。

因此,要获取数组中元素的数量,您应该执行以下操作

printf ("Number of elements = %zu", sizeof(arr)/sizeof(arr[0]));
            / *(size of the entire array / size of one element in the array) */

引用C11,第§6.3.2.1章(重点是我的

除了当它是的操作数sizeof操作者,所述_Alignof操作者,或一元&运算符,或者是用于初始化数组字符串文字具有类型的表达式“”类型的数组“”被转换成类型的表达式“”类型指针''指向数组对象的初始元素,不是左值。[...]

那就是

sizeof产生类型为的结果size_t,您应该使用%zu格式说明符来打印结果。

要打印指向对象的指针,必须使用%p格式说明符并将相应的参数强制转换为void *


推荐阅读
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
  • 华为捐赠欧拉操作系统,承诺不推商用版
    华为近日宣布将欧拉开源操作系统捐赠给开放原子开源基金会,并承诺不会推出欧拉的商用发行版。此举旨在推动欧拉和鸿蒙操作系统的全场景融合与生态发展。 ... [详细]
  • 本文详细介绍了Linux系统中用于管理IPC(Inter-Process Communication)资源的两个重要命令:ipcs和ipcrm。通过这些命令,用户可以查看和删除系统中的消息队列、共享内存和信号量。 ... [详细]
  • A*算法在AI路径规划中的应用
    路径规划算法用于在地图上找到从起点到终点的最佳路径,特别是在存在障碍物的情况下。A*算法是一种高效且广泛使用的路径规划算法,适用于静态和动态环境。 ... [详细]
  • NX二次开发:UFUN点收集器UF_UI_select_point_collection详解
    本文介绍了如何在NX中使用UFUN库进行点收集器的二次开发,包括必要的头文件包含、初始化和选择点集合的具体实现。 ... [详细]
  • 解决SQL Server数据库sa登录名无法连接的问题
    在安装SQL Server数据库后,使用Windows身份验证成功,但使用SQL Server身份验证时遇到问题。本文将介绍如何通过设置sa登录名的密码、启用登录名状态以及开启TCP协议来解决这一问题。 ... [详细]
  • MySQL 数据库连接方法
    本文介绍了如何使用 MySQL 命令行工具连接到指定的数据库。 ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • 本文详细介绍了如何在PHP中记录和管理行为日志,包括ThinkPHP框架中的日志记录方法、日志的用途、实现原理以及相关配置。 ... [详细]
  • 如何解决8080端口被占用问题
    本文介绍了如何通过命令行和任务管理器查找并终止占用8080端口的进程,以确保该端口能够正常使用。 ... [详细]
  • 如何在Eclipse中配置Python开发环境
    本文详细介绍了如何在Eclipse中配置Python开发环境,包括安装PyDev插件和设置Python解释器的步骤。 ... [详细]
  • Excel 数据分析基础
    Excel 是数据分析中最基本且强大的工具之一,具备多种实用功能和操作方法。本文将简要介绍 Excel 的不同版本及其兼容性问题,并探讨在处理大数据时的替代方案。 ... [详细]
  • 如何在Windows 8任务栏中添加工具栏
    本文介绍了在Windows 8系统中如何通过创建工具栏和使用第三方软件Bins来扩展任务栏的功能。 ... [详细]
  • 本文总结了《编程珠玑》第12章关于采样问题的算法描述与改进,并提供了详细的编程实践记录。参考了其他博主的总结,链接为:http://blog.csdn.net/neicole/article/details/8518602。 ... [详细]
  • 本文介绍了如何在 ASP.NET 中设置 Excel 单元格格式为文本,获取多个单元格区域并作为表头,以及进行单元格合并、赋值、格式设置等操作。 ... [详细]
author-avatar
百变精灵_tb
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有