地址的表示方法有多种:(十六进制表示)0x407038。前面的0x表示是16进制的意思。
但是实际上,你完全可以将16进制的数字化为常见的10进制来解决问题。
现在让我来解答你的问题。sizeof函数可以看到对象的所占字节大小。
现在,将内存地址类比为房间的门牌号码。比如0x400030的房间号码是30。
例如:8位的机器
将所有的内存条插满,总共是2^8=256个内存地址。
而我们知道,按照规定一个内存地址所代表的永远是1个字节。
所以:插满的机器总共有256字节。
现在的条件是,8位的机器,256字节的内存。想要一个指针,指针里面存放地址,这个指针要有足够的空间将所有的地址存放进去。
即它要存放门牌号码1-256,它要保证所有的门牌都要记下。那么如果这个指针开的大小是2位,即00,01,10,11总共能表示1-4个门牌,这显然是不够的,如果开到8位,那么这个指针就能存放1,2,3,4,5…256。
所以最终,可能(因为有些指针是在寄存器上面的)在256字节的内存上面有一个指针占用了8位。
最终的规律:8位计算机->指针大小是8位 32位计算机->指针大小是32位 。。。。
c语言中,指针变量为何只占4字节?
在C语言中,一般认为内存是一个大的字节数组,基本单位是字节,每一个字节包含一个地址,有多少个地址,是有CPU的地址总线位数决定的,所有的地址一般称作地址空间,比如32位的cpu,地址总线的位数是32位,它可描述的地址空间为0x0000 0000 0000 0000 ~ 2^32 - 1,正是因为此,所以在32位的系统上...
c语言中,指针变量为何只占4字节?
所以最终,可能(因为有些指针是在寄存器上面的)在256字节的内存上面有一个指针占用了8位。最终的规律:8位计算机->指针大小是8位 32位计算机->指针大小是32位 。。。
指针为什么是4个字节?
这个和你机器硬件和操作系统的寻址空间有关系。如果在64位机器和操作系统上面,指针是64位(8字节)。当然你也可以在64位操作系统上面用32位兼容模式,那样就是4字节了。TC是模拟的老的16位环境,所以是16位的。你的linux是32位,int就是32位。int的大小和具体的C编译器的实现有关系。可以是16,32...
C语言中一个指针占用多少字节
一个指针变量在内存中占两个字节(small模式编译),一个指针变量在内存中占四个字节(32位机器上),一般都是32位机器的,所以四个字节咯。指针即为地址,指针几个字节跟语言无关,而是跟系统的寻址能力有关。指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要...
c语言中char *b=“++”,sizoef(b)=啥?为什么?
c语言中char *b=“++”,sizoef(b)=4 因为指针变量的存储空间全部都是4,它只是存储着后面的字符串常量的首地址。与char *b=“++”或char *b=“+++++”无关的。
C语言中指针的长度!
记住32位下的指针 都是4个字节可以简单的这么理解:一个基本的数据类型(包括结构体等自定义类型)加上“*”号就构成了一个指针类型的模子。这个模子的大小是一定的,与“*”号前面的数据类型无关。“*”号前面的数据类型只是说明指针所指向的内存里存储的数据类型。所以,在 32位系统下,不管什么样...
一个指针类型的简单变量占用内存中的字节数位什么?
一个指针变量在内存中占两个字节(small模式编译),一个指针变量在内存中占四个字节(32位机器上),一般都是32位机器的,所以四个字节。在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。
c语言中指针占多少个字节
指针占字节数和编译器有关.如果是16位编译器,那么指针占2字节.如果是32位编译器,那么指针占4字节 如果是64位编译器 那么指针占8字节.即 指针位数和编译器位数相同.
关于C语言中,指针变量与char int double等变量分配内存的问题??
左值和右值:表达式中的左值具有对象语义,而右值没有。通俗点说左值可以出现在赋值操作符=的左边,而右值不可以(C语言中右值可以简单地理解成值)。&操作符作用于一个左值,获得一个右值指针。对象地址作为按字节编址的内存单元的编号,最小单位是1(对应于一个字节),且必定是地址空间内的元素。指针...
关于c语言指针的一些问题。
1、不是说系统64位它就是8字节,而是受限于地址总线的字节宽度,你的地址总线是64位的即指针就是8字节的,但是现在的64位个人pc多半是x86-64能兼容32位的应用程序。2、有,你64 位的机器,它的虚拟内存可以到8TB,如果你在64位机上装个32位的windows你会发现,我的个去……慢的要死(我犯过...