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字节,与指针类型无关。

相关推荐
Data-Miner3 小时前
面对 AI 大模型智能涌现,如何从技术层面保护好隐私与数据安全?
大数据·人工智能
青瓦梦滋3 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
hpoenixf3 小时前
当 AI 开始谈“买什么”,研究助手离投顾和交易还有多远?
人工智能
大模型真好玩3 小时前
如何让视频模型对你言听计从?结构化提示词助你生成电影级画面
人工智能·agent·deepseek
zhang133830890754 小时前
传统机械三杯式风速传感器易磨损冻堵?CG-88金属超声波风速风向传感器给出免运维方案
运维·服务器·网络·人工智能·自动化
特立独行的猫a4 小时前
会说确认叫车才下单-启元机器人官方滴滴打车技能源码详解
人工智能·机器人·技能·启元机器人
老金带你玩AI4 小时前
GPT-6.1 Terra上线:更便宜了,干活到底怎么样?
人工智能
会议咨询4 小时前
2027年电力电子、人工智能与大数据国际会议(PEABD 2027)
大数据·人工智能·电力电子
Jsundoku4 小时前
第五章 深度学习 -- 卷积神经网络
人工智能·深度学习·cnn
水如烟5 小时前
孤能子视角:SEP《人工智能的认识论》EIS读法·理解——理解幻觉与解压缩幻觉:同一缺口,两份报告
人工智能