c语言 sizeof 指针变量,别混淆了sizeof(数组名)和sizeof(指针)

2023-05-16

本文著作权声明:请务必阅读个人介绍部分!

我们在挨个儿输出一个数组中的元素时,最常用的就是用一个for循环来实现,简单了事。比如类似下面的代码片段:

for(i = 0; i< length; i++)

{

printf(“数组元素是%d”, 数组[i]);

}

用一个下标索引变量i来遍历整个数组,length是数组的长度。当然了,length得提前计算出来,计算的方式有很多,很多朋友会想到用sizeof计算。不过,sizeof好归好,但是也要睁大你的双眼,小心用错,你若不信,请继续往下看。

先看传统的做法,代码如下:

#include "stdio.h"

int main(void)

{

int number[5] = {1,2,3,4,5};

int index = 0;

printf("数组的元素分别是:\n");

for(index = 0;index < 5; index++)

{

printf("%d ", number[index]);

}

printf("\n");

return 0;

}

最简单的方法就是写死了数组长度,再用一个循环挨个儿输出。程序清晰易懂,结果是:

image.png

结果也是清晰易懂。

有的朋友会突发奇想,为何不这样来做:

#include "stdio.h"

int main(void)

{

int number[5] = {1,2,3,4,5};

int index = 0;

int *p = &number[0];

printf("数组的长度是: %d\n", sizeof(p));

printf("数组的元素分别是:\n");

for(index = 0;index < sizeof(p); index++)

{

printf("%d ", number[index]);

}

printf("\n");

return 0;

}

增加了一个指针变量p,指针变量p的初始值是数组首元素的地址。有的朋友企图用sizeof(p)来获取数组长度,这是不对的,请看结果:

image.png

从结果可以看到,sizeof(p)其实计算的是指针变量p的大小。在32位系统上,不管指针p指向的是整型数据,还是字符型数据,short型数据,long型数据等,指针p本身所占的内存字节数均为4。也就是要使用4个字节的大小来存储变量p的值。

我还见过有朋友这样用sizeof的,代码如下:

#include "stdio.h"

void print(int number[5])

{

int index = 0; ;

printf("函数print中,数组长度是: %d ", sizeof(number));

printf("函数中数组的元素分别是:\n");

for(index = 0; index < sizeof(number) / sizeof(number[0]); index++)

{

printf("%d ", number[index]);

}

printf("\n");

}

int main(void)

{

int number[5] = {1,2,3,4,5};

print(number);

return 0;

}

这次代码又修改了一下,将数组名number传给函数print,并且print函数的形参看上去像是一个数组。运行结果是

image.png

诺诺,运行结果不是预期中的结果啊。其实,函数print形参看上去像是一个数组,于是有的朋友就会认为它就是一个数组,于是就发生了使用sizeof来计算数组长度;真实情况是print函数的参数还是一个指针,指针,指针,没错,就是一个指针,所以sizeof(number)计算的还是指针的大小。初学的朋友们一定要切记!

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

c语言 sizeof 指针变量,别混淆了sizeof(数组名)和sizeof(指针) 的相关文章

  • cmdb项目-2

    1 命令插件异常处理 43 日志采集 1 为了更清楚发送客户端收集信息的状态 xff0c 优化返回api的数据 xff0c 变为字典存储 状态 错误信息 数据 xff0c 因为每个插件的每种系统下都要这个返回值我们将他单独做成类 lib B
  • cmdb项目-1

    1 什么是cmdb 配置管理数据库 存储基础设备的各种信息配置等 CMDB可以存储并自动发现整个IT网络上的各种信息 xff0c 比如一个IT网络上有多少台服务器 多少存储 设备的品牌 资产编号 维护人员 所属部门 服务器上运营什么操作系统
  • cmdb项目-3

    1 cmdb资产审计 2 stark组件使用 快速完成网站的一个组件 使用方式与django的admin系统类似 仅仅将model注册 就可以生成对model增删改查的页面 当然这里还包括了模糊搜索 排序 批量操作等等 1 拷贝并注册sta
  • 什么是网络操作系统?网络操作系统具有那些基本功能?

    1 网络操作系统可以理解为网络用户与计算机网络之间的接口 xff0c 他是专门为网络用户提供操作接口的的系统软件 xff0c 除了管理计算机的软件和硬件资源 xff0c 具备单机操作系统所有的功能外 xff0c 还具有向网络计算机提供网络通
  • .net event 使用 Action

    Action lt string gt methodCall 61 x 61 gt x 43 61 34 haha 34 MessageBox Show x public event Action lt string gt BoilerEv
  • VS-按F12无法跳转到函数定义,点击右键也无法跳转

    工具 gt 选项 gt 项目和解决方案 gt 常规 xff0c 把 在解决方案资源管理器中跟踪活动项 反选 转载于 https www cnblogs com zaishuiyifang006 p 5640318 html
  • C语言文件操作笔记-4

    C文件操作 文件函数说明相关函数说明 xff1a opendirclosedirmkdirtelldirseekdirseekdirrmdirrmdiraccessreaddir 示例代码 xff1a 示例1 xff1a 综合使用 文件函数
  • 如何免费获得auto uninstaller的密钥?auto uninstaller密钥是不是得买?auto uninstaller密钥是多少?...

    如何免费获得auto uninstaller的密钥 xff1f auto uninstaller密钥是不是得买 xff1f auto uninstaller密钥是多少 xff1f 找到一个帖子密钥可以用 技术贴 xff1a auto uni
  • 网络:万维网(WWW)

    ylbtech 网络 xff1a 万维网 xff08 WWW xff09 www xff08 万维网缩写 xff09 同义词 万维网一般指www xff08 万维网缩写 xff09 WWW是环球信息网的缩写 xff0c xff08 亦作 W
  • Linux 系统查看服务器SN序列号以及服务器型号

    1 单独查看服务器的序列号 root 64 localhost dmidecode t system grep 39 Serial Number 39 Serial Number 2102310YPY10J30 2 单独查看服务器型号 ro
  • mysql与mysqld

    mysql是客户机 服务器的结构 mysql是客户端行工具 xff0c 连接mysqld服务 xff0c 执行sql命令 xff0c 可认为客户端sdk mysqld 启动mysql数据库服务 脚本启动mysql服务的命令是 net sta
  • Gazebo: Could not find parameter robot_description on parameter server

    robot state publisher looks for the parameter 34 robot description 34 by default The robot state publisher tutorials sug
  • LocalDateTime的一些用法

    包括获取当前时间 xff0c 指定特定时间 进行时间的加减等 LocalDateTime localDateTime3 61 LocalDateTime now LocalDate now LocalTime now localDateTi
  • HDFS读写流程

    一 HDFS中的block packet chunk 1 Block 在将文件上传到hdfs之间需要分块 xff0c 这个块就是block xff0c 默认为128MB xff08 hadoop2 X xff09 xff0c 当然可以更改
  • 事件本质

    事件为什么不能再外面赋值 xff1f 本质上把事件编译成一个私有的委托变量 里面有 add 委托名 事件名 和remove 委托名 事件名 方法 这两个属性就是利用多播委托的原理 43 61 xff1a Delegate Combine x
  • [powershell]统计目录大小

    Write Host DU 1 0 统计目录大小的脚本 xff0c 作用和linux的du类似 96 n args 61 34 D software 34 if args write host span style color 800000
  • 什么是块级元素和内联级元素

    1 block xff08 块 xff09 元素 的特点 xff1a 总是在新行上开始 xff1b 高度 xff0c 行高以及外边距和内边距都可控制 宽度缺省是它的容器的100 xff0c 除非设定一个宽度 它可以容纳内联元素和其他块元素
  • Zstack中UART0和UART1同时工作的方法

    1 在 project gt options gt C C 43 43 compiler pre processors settings中 设置如下 xff1a HAL UART 61 TRUE HAL UART ISR 61 2 HAL
  • Docker命令详解(run篇)

    命令格式 xff1a docker run OPTIONS IMAGE COMMAND ARG Usage Run a command in a new container 中文意思为 xff1a 通过run命令创建一个新的容器 xff08
  • 计算机vb考试程序试题,二级计算机VB语言程序设计考试题及答案

    二级计算机VB语言程序设计考试题及答案 为了使广大考生在备战计算机等级考试时 xff0c 更快的掌握相应知识点 xff0c 下面是小编搜索整理的二级计算机VB语言程序设计考试题及答案 xff0c 供参考练习 xff0c 预祝考生们考出自己理

随机推荐