c语言测试题:sss1移动多少个字节?可用si

电容 浏览

每次进行C语言的面试,我一定会问下面的问题:给定一个数组intsss,请问:1)sss1移动多少个字节?2)u0026sss1移动多少个字节?这块的知识点考察的是指针的运算、数组指针、数组名的首地址的考察。觉得还是可以考察一个人的理论基础是否到位的一个比较好的题目。

1、C语言中的变量有几个字节组成?

可用sizeof运算符计算变量占用的字节数。1、在32位系统中:char(1)字节short(2)字节int(2)字节long(4)字节char*(4)字节int*(4)字节int**(4)字节2、在64位系统中:char(1)字节short(2)字节int(4)字节long(8)字节char*(4)字节int*(4)字节int**(4)字节扩展资料在C++中short占2字节,int、float、long都占4字节,double占8字节。

2、一个字节有一个地址,而一个地址却要占4个字节,这个该如何理解?!

内存中的每一个字节都进行了编号,这个编号就是地址,地址的意义在于我们可以快速读取到这个地址上面的数据,编号越大说明这个字节距离初始字节越远,那么最远的地址有多大呢?如果是32位系统,主流计算机是二进制的,那么这个系统的最大寻址能力是2^32,就是32位电脑最多支持4G运存,那么最远的地址就是4G运存的最后一位字节,给这个字节编号就是2^32(一般把这个数用16进制表示),为了能表达这个最大的位置数,就需要想办法了一个字节有8个比特位,1个比特位只能表达1和0两个数,2个比特位可以表达4个数,要表达2^32个数,就需要32个比特位,也就是4个字节,所以一个指针变量至少需要4个字节才够用。

3、指针一定是4个字节吗

这与操作系统有关,一般来说32位操作系统指针是4字节的还与指针类型有关,near型、far型、huge型等。由CPU地址总线宽度、系统页面地址空间和编译器决定的,如果CPU允许的情况下,编译器在编译64位程序时也可以按照CPU最大64位宽度进行寻址,那么由这个编译器编译的程序就是64位(8字节)。但是你必须明白一个重点,系统寻址不是直接按物理地址访问内存的,而是通过拼接”的(段地址+逻辑地址),拼接后的地址提交给物理层以便提取数据,这是由于历史原因造成的,而逻辑地址在Windows中叫做分页,当然Windows可能内部也不是完全等效于逻辑地址。