sizeof操作符

在32位WinNT操作系统环境下,有如下代码:

c

1 char str\[\] = "Hello";

2 char *p = str;

3 int n = 10;

4 sizeof(str) = ____;

5 sizeof(p) = ____;

6 sizeof(n) = ____;

7 void Func ( char str100 )

8 {

9 sizeof(str) = ____;

10 }

11 void *p = malloc(100);

12 sizeof(p) = ____;

解析

程序代码说明如下。

□ 代码第4行,str变量表示数组,对数组变量做sizeof运算得到的是数组占用的总空间。注意,数组最后有一个元素保存字符串结束符,所以 sizeof(str)=strlen("Hello")+1 。

□ 代码第5行和第6行中的p和n分别是指针型变量和int型变量。在32位平台下,两者都占4个字节的空间,所以结果都是4。

□ 代码第9行中的str是函数的参数,它在做sizeof运算时被认为是指针。因为调用函数Func(str)时,数组是"传址"的,程序会在栈上分配4字节来指向数组,因此结果也是4。

□ 代码第11行中的p首先指向100字节的内存, sizeof(p) 结果是4。

运行结果:(32位系统)

  1. sizeof(str) = 6

  2. sizeof(p) = 4

  3. sizeof(n) = 4

  4. 函数内 sizeof(str) = 4

  5. sizeof(p) (malloc那行)= 4

分析:

  1. 数组定义处, sizeof(数组名) 得到数组总字节,不会退化为指针; "Hello" 自带 \0 ,5个字符+结束符=6字节。

  2. 数组作为函数形参,直接退化为指针,sizeof只能得到指针大小。

  3. 32位系统所有指针都是4字节,与指针类型无关。

相关推荐
沫璃染墨1 小时前
《Linux工程实践篇(一):认识设计模式——从日志系统看策略模式》
linux·c++·安全·设计模式·策略模式
柯南46681 小时前
【AI工程师精讲】KV Cache 精讲:为什么 AI 越聊越慢,以及长上下文真正的成本在哪
人工智能·ai编程
QCoding1 小时前
Spring AI Alibaba Graph实战:从ReAct Agent到Workflow,企业AI复杂流程该如何编排?
java·人工智能
小蒋观天下1 小时前
端侧大模型在安防摄像头部署实操(上)|行业痛点、架构选型、落地思路解析
大数据·人工智能·安全·计算机视觉·ai大模型
wuminyu1 小时前
ForkJoinPool内部WorkQueue的Lock-Free数组操作以及并发任务窃取原理剖析
java·linux·c语言·jvm·c++
hzxxxz2 小时前
端到端测速数据采集实战:从节点部署到指标口径的完整链路
人工智能
林伽一2 小时前
能力趋同、账单分化,技术选型正在从榜单转向负载|2026年10月06日
人工智能·科技·安全·ai
她说彩礼65万2 小时前
C语言 堆区和栈区
java·linux·c语言
Jooolin2 小时前
把 GitHub Issue 的第一轮脏活交给 AI:做一个 Issue 分诊助手
人工智能·github