阿里笔试题记录(Android客户端部分)
选择题
结果应该是选择 80,8
思路:
- 指针的值都是一个个地址,而地址是用无符号整型值来表示的,也就是unsigned int
。因此一个指针类型变量的大小就是unsigned int
类型的大小。
- 64位系统,一个地址占用的二进制位数为64(8字节),32位系统,地址的二进制位数32(4字节)。参考64位操作系统的指针不都是64位吗
32位cpu和64位cpu,这个位数指的是数据字长,而不是地址字长。两者没有必然的数值上的联系。处理器字长是指处理器能同时处理的位数。 而处理器的寻址范围是要看处理器的地址总线的位数,32位地址总线能够访问0~2^32-1,也就是2^32个存储单元(4GB),因此32位cpu的指针大小就是4个字节(32bit)。64位处理器的数据总线为64位,而地址总线大都是32位(当然也有的64位处理器的数据总线和地址总线都是64位的)。参考文章32位机指针为什么是4个字节 64位与32位的区别
char*p[10]
表示声明一个能够盛放10个char指针元素的数组,命名为p;char(*p)[10]
表示声明一个指针,指向一个长度为10的char数组。sizeof()
函数,以字节的形式返回其操作数的存储大小。当操作数是指针时,该函数依赖于编译器…当操作数是数组类型时候,返回值是数组的总字节数。所以,sizeof(p)
是计算的元素类型为char指针,元素数量为10的数组的大小,计算方式为元素类型占用内存的字节数*数组元素个数,sizeof(p1)
是计算一个指针的大小。参考文章解析c语言的sizeof- 在编译器为