`
happmaoo
  • 浏览: 4339964 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于sizeof运算符的一些理解

阅读更多

作者:朱金灿
来源:http://blog.csdn.net/clever101

CSDN上有网友提问:

这段代码运行结果为4,4,16,4。
问(1)为什么pArray_No1初始化为指向10个int型的内存地址块(我的理解没错吧?)
而sizeof的运算结果只是1个int型的字节大小,按理来说应该是10个啊,为什么呢?
问(2)pArray_No2=a;说明pArray_No2指向了数组a首元素的地址,sizeof(pArray_No2)
=4,我理解为编译器只计算了数组a首元素地址的内存空间大小;但是问题出来了,a
代表的肯定是数组a首元素的地址,但是这里sizeof(a)=16,说明编译器计算的不是
一个首元素,而是整个数组4个元素的地址占的内存空间。我迷惑了,pArray_No2与
a代表的意义相同,但是为什么sizeof的结果却截然不同呢?


MSDN上的解释为:
The sizeof keyword gives the amount of storage, in bytes, associated with a
variable or a type (including aggregate types).
This keyword returns a value of type size_t.
其返回值类型为size_t,在头文件stddef.h中定义。这是一个依赖于编译系统的值,一
般定义为
typedef unsigned int size_t;

我觉得理解sizeof运算符的关键在于理解编译期和运行期的区别。静态的数组的大小在编译期就决定了,所以sizeof获取的是数组的大小,而指针动态开辟内存,sizeof不能获取它的开辟的内存的大小,它只能获取指针在该编译器的编译期的大小,在win32平台上无论什么指针的大小都是4个字节。你可以通过编译下面两段代码进行比较分析:

(1)

(2)

分享到:
评论

相关推荐

    对C语言中sizeof细节的三点分析介绍

    1.sizeof是运算符,跟加减乘除的性质其实是一样的,在编译的时候进行执行,而不是在运行时才执行。那么如果编程中验证这一点呢?ps:这是前两天朋友淘宝面试的一道题,小编理解: 代码如下:#include<iostream> using...

    明解C语言(第3版)入门篇.[日]柴田望洋(带详细书签).pdf 【半高清】

    sizeof运算符 200 size_t型和typedef声明 202 整型的灵活运用 202 整型的内部表示 204 无符号整数的内部表示 205 有符号整数的内部表示 207 按位操作的逻辑运算 209 位移运算符 212 整型常量 216 整型常量...

    C++ Primer中文版(第5版)李普曼 等著 pdf 1/3

     4.9 sizeof运算符 139  4.10 逗号运算符 140  4.11 类型转换 141  4.11.1 算术转换 142  4.11.2 其他隐式类型转换 143  4.11.3 显式转换 144  4.12 运算符优先级表 147  小结 149  术语表 149  第5章 ...

    C++Primer(第5版 )中文版(美)李普曼等著.part2.rar

     4.9 sizeof运算符 139  4.10 逗号运算符 140  4.11 类型转换 141  4.11.1 算术转换 142  4.11.2 其他隐式类型转换 143  4.11.3 显式转换 144  4.12 运算符优先级表 147  小结 149  术语表 149  第5章 ...

    【全新正版】现代C++程序设计(原书第2版)

    5.1.1 sizeof运算符 5.1.2 预留内存 5.1.3 计算机内存和十六进制 5.2 取地址运算符& 5.3 指针 5.4 函数、指针以及间接运算符 5.4.1 解决思路 5.4.2 指针和函数 5.4.3 有效处理大型数据 5.5 函数和引用 5.5.1 复习:...

    23道常见的C语言面试题

    文档内容涵盖了const关键字的使用、指针常量与常量指针的区别、static...sizeof与strlen运算符的差异、条件变量的使用、指针的基本概念和用法、动态内存分配的方法、结构体的定义和使用、指针数组的定义和使用、静态...

    11.第十一章 指针.txt

    (3)类型:为int,决定该变量能参加的运算,决定了其占用空间的大小(从起始地址开始占用的连续字节数),占用空间的大小用sizeof运算符计算,sizeof(i)或sizeof(int)。 变量的指针就是变量的地址,存放变量地址...

    C语言程序设计标准教程

    第二章: 数据类型、运算符、表达式 C语言的数据类型  在第一课中,我们已经看到程序中使用的各种变量都应预先加以说明,即先说明,后使用。对变量的说明可以包括三个方面: ?数据类型 ?存储类型 ?作用域  在本课...

    Visual C++ 2005入门经典.part08.rar (整理并添加所有书签)

    4.2.5 sizeof运算符 4.2.6 常量指针和指向常量的指针 4.2.7指针和数组 4.3 动态内存分配 4.3.1 堆的别名——自由存储器 4.3.2 new和delete运算符 4.3.3 为数组动态分配内存 4.3.4 多维数组的动态分配 4.4 使用引用 ...

    Visual C++ 2005入门经典.part04.rar (整理并添加所有书签)

    4.2.5 sizeof运算符 4.2.6 常量指针和指向常量的指针 4.2.7指针和数组 4.3 动态内存分配 4.3.1 堆的别名——自由存储器 4.3.2 new和delete运算符 4.3.3 为数组动态分配内存 4.3.4 多维数组的动态分配 4.4 使用引用 ...

    Visual C++ 2005入门经典.part07.rar (整理并添加所有书签)

    4.2.5 sizeof运算符 4.2.6 常量指针和指向常量的指针 4.2.7指针和数组 4.3 动态内存分配 4.3.1 堆的别名——自由存储器 4.3.2 new和delete运算符 4.3.3 为数组动态分配内存 4.3.4 多维数组的动态分配 4.4 使用引用 ...

    Visual C++ 2005入门经典.part09.rar (整理并添加所有书签)

    4.2.5 sizeof运算符 4.2.6 常量指针和指向常量的指针 4.2.7指针和数组 4.3 动态内存分配 4.3.1 堆的别名——自由存储器 4.3.2 new和delete运算符 4.3.3 为数组动态分配内存 4.3.4 多维数组的动态分配 4.4 使用引用 ...

    Visual C++ 2005入门经典.part06.rar (整理并添加所有书签)

    4.2.5 sizeof运算符 4.2.6 常量指针和指向常量的指针 4.2.7指针和数组 4.3 动态内存分配 4.3.1 堆的别名——自由存储器 4.3.2 new和delete运算符 4.3.3 为数组动态分配内存 4.3.4 多维数组的动态分配 4.4 使用引用 ...

    Visual C++ 2005入门经典.part05.rar (整理并添加所有书签)

    4.2.5 sizeof运算符 4.2.6 常量指针和指向常量的指针 4.2.7指针和数组 4.3 动态内存分配 4.3.1 堆的别名——自由存储器 4.3.2 new和delete运算符 4.3.3 为数组动态分配内存 4.3.4 多维数组的动态分配 4.4 使用引用 ...

    9.第九章 数组.txt

    (4)数组占用空间大小的计算,可以用sizeof运算符。数组总字节数=sizeof(类型说明符)*数组长度=sizeof(数组名)。 9.2.2 一维数组引用 数组元素的的标识方法为数组名后跟下标。引用数组元素的一般形式为:数组名...

    C语言入门经典(第4版)--源代码及课后练习答案

    7.4.2 分配内存时使用sizeof运算符 261 7.4.3 用calloc()函数分配内存 265 7.4.4 释放动态分配的内存 265 7.4.5 重新分配内存 267 7.5 使用指针处理字符串 268 7.5.1 更多地控制字符串输入 268 7.5.2 使用...

    java坑爹的笔试题-cpp-primer-5th:C++Primer第五版学习资料

    这几章有非常多的小细节比较坑爹,指针与数组、指针与const、sizeof()运算符、this指针等等,看完这部分,一些最基础的程序基本上都能解决。第3、6、7章个人觉得对新手最困难,而且非常重要,需要重点理解。 Part II...

Global site tag (gtag.js) - Google Analytics