精华内容
下载资源
问答
  • 1、不同系统下数据类型字节大小 32位系统和64位系统的区别在于long 和指针...其中,彩色部分代表的意思是该类型在三种平台下所占字节大小不同,黑色说明所占字节数相同! 2、32位系统下各个数据类型的取值范围 ...

    1、不同系统下数据类型的字节大小
    32位系统和64位系统的区别在于long 和指针
    在这里插入图片描述
    其中,彩色部分代表的意思是该类型在三种平台下所占字节大小不同,黑色说明所占字节数相同!
    在这里插入图片描述

    2、32位系统下各个数据类型的取值范围
    在这里插入图片描述

    展开全文
  • 在C语言和C++中,经常会出现某一种数据类型字节数为多大的问题,其实这些机器字长和编译器有关系,通过总结,...其中,彩色部分代表的意思是该类型在三种平台下所占字节大小不同,黑色说明所占字节数相同! ...
    在C语言和C++中,经常会出现某一种数据类型所占的字节数为多大的问题,其实这些机器字长和编译器有关系,通过总结,如下图:

    这里写图片描述

    其中,彩色部分代表的意思是该类型在三种平台下所占字节大小不同,黑色说明所占字节数相同!
    展开全文
  • 从上面可以得知只有指针类型变成了8个字节,因为指针里面存储的是数据的地址,而非数据本身。所以会变为2倍。 二、Linux下 64位系统g++测试: 说明:CentOS下查看当前机器多少位系统命令: ge...

    一,在Win10系统下,先32位测试:

    1.源码:

    一、VS2017测试:

    32位测试结果:

    二、64位测试:

    说明:不同编译器对数据类型所占的大小会进行调整。从上面可以得知只有指针类型变成了8个字节,因为指针里面存储的是数据的地址,而非数据本身。所以会变为2倍。

    二、Linux下 64位系统g++测试:

    说明:CentOS下查看当前机器多少位系统命令: getconf LONG_BIT

    1.源码

    一、测试结果:

    说明:在CentOS7下64位操作系统时,相比较于Win10 64位操作系统时,long变为了8个字节其它一样。

                                                                                                                                                           珍&源码

    展开全文
  • 虽然所有的指针都只8个字节,但不同类型的变量却不同的字节数。 一个int占用4个字节,一个char占用1个字节,而一个double占用8字节; 现在只有一个地址,我怎么才能知道要从这个地址开始向后访问多少字节的存储...
  • 前面已经和大家详细的介绍了指针的用法,那么所谓的指针数组和数组指针到底有何...在32 位系统下任何类型指针永远是占4 个字节,至于它指向的数组占多少字节,不知道,具体要看数组大小。它是“指向数组的指针”的简

    前面已经和大家详细的介绍了指针的用法,那么所谓的指针数组和数组指针到底有何变化,之间有什么联系呢?是否表示一个意思,还是有不同含义,下面就聊聊。

    指针数组

    首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身的大小决定,每一个元素都是一个指针,在32 位系统下任何类型的指针永远是占4 个字节。它是“储存指针的数组”的简称。

    数组指针

    首先它是一个指针,它指向一个数组。在32 位系统下任何类型的指针永远是占4 个字节,至于它指向的数组占多少字节,不知道,具体要看数组大小。它是“指向数组的指针”的简称。

    当指针表示在后的时候,说明是个指针,只是指向一个数组;
    当指针表示在前的时候,说明它是一个数组,只是数组的元素都是指针。
    这样大家应该就能明白我说的是什么。

    定义

    数组指针(也称行指针)定义

    int (*p)[n]

    ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。

    //定义二维数组
     int a[3][4];
    
    //该语句是定义一个数组指针,指向含4个元素的一维数组。
     int (*p)[4]; 
          
    //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
     p=a;  
        
    //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]
     p++;   

    所以数组指针也称指向一维数组的指针,亦称行指针。

    在二维数组里面
    a,&a,a[0],&a[0],&a[0][0]五个值是一样的,都指向二维数组的首地址(起始位置)
    区别在于这五种表达方式的类型是不同的,以int a[2][3]举例:

    a是二维数组名,是常量,存放着二维数组的首地址,类型为二维数组,sizeof(a)=24

    &a 二维数组a的(首)地址,本身是一个指针,sizeof(&a)=4,指针类型都为4

    a[0]指向二维数组中的第一行数组a[0][],类型是一维数组sizeof(a[0])=12
    &a[0]代表a[0]的地址,与一维数组名a[0]值相同,但本身是指针类型sizeof(&a[0])=4
    &a[0][0]表示二维数组中第一个元素的地址,指针类型sizeof(&a[0][0])=4

    指针数组定义

     int *p[n]

    []优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素。

    下面这样赋值是错误的:

    p=a;

    因为p是个不可知的表示,只存在p[0]、p[1]、p[2]…p[n-1],而且它们分别是指针变量可以用来存放变量地址。
    但可以如下面赋值:

    *p=a;

    这里*p表示指针数组第一个元素的值,也就是a的首地址的值。

    如要将二维数组赋给一指针数组:

    int *p[3];
    int a[3][4];
    p++; //该语句表示p数组指向下一个数组元素。注:此数组每一个元素都是一个指针
    for(i=0;i<3;i++)
    p[i]=a[i]
    
    

    这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2];所以要分别赋值。

    数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。

    指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。
    还需要说明的一点就是,同时用来指向二维数组时,其引用和用数组名引用都是一样的。
    比如要表示数组中i行j列一个元素:

    *(p[i]+j)*(*(p+i)+j)(*(p+i))[j]、p[i][j]

    优先级:() > [] > *

    根据优先级判断指针数组和数组指针

    下面到底哪个是数组指针,哪个是指针数组呢:

    A)
    int *p1[10];
    
    B)
    int (*p2)[10];

    在这之前首先需要明白一个符号之间的优先级问题。

    先分析A)中“[]”的优先级比“*”要高。
    p1 先与“[]”结合,构成一个数组的定义,数组名为p1,int *修饰的是数组的内容,即数组的每个元素。那现在我们就好理解了,这是一个数组,其包含10 个指向int 类型数据的指针,即指针数组。

    再分析B)中“()”的优先级比“[]”高。
    “*”号和p2 构成一个指针的定义,指针变量名为p2,int 修饰的是数组的内容,即数组的每个元素。数组在这里并没有名字,是个匿名数组。
    那现在我们清楚p2 是一个指针,它指向一个包含10 个int 类型数据的数组,即数组指针.

    如下图所示:
    在这里插入图片描述

    论a 和&a 之间的区别

    举例说明a 和&a 之间的区别,代码如下:

    int main()
    {
       char a[5]={'A','B','C','D'};
       char (*p3)[5] = &a;
       char (*p4)[5] = a;
       return 0;
    }

    p3+1 的值会是什么?p4+1 的值又会是什么?毫无疑问,p3 和p4 都是数组指针,指向的是整个数组。
    &a 是整个数组的首地址;
    a是数组首元素的首地址

    其值相同但意义完全不同。
    在C 语言里,赋值符号“=”号两边的数据类型必须是相同的,如果不同需要显示或隐式的类型转换。

    p3 这个定义的“=”号两边的数据类型完全一致,而p4 这个定义的“=”号两边的数据类型就不一致了。
    左边的类型是指向整个数组的指针,右边的数据类型是指向单个字符的指针。

    现在清楚了p3 和p4 都是指向整个数组的,那p3+1 和p4+1 的值就很好理解了。

    把数组长度改小点,会有什么问题?p3+1 和p4+1 的值又是多少呢?

    int main()
    {
       char a[5]={'A','B','C','D'};
       char (*p3)[3] = &a;
       char (*p4)[3] = a;
       return 0;
    }

    把数组长度改大点,又会有什么问题?

    int main()
    {
       char a[5]={'A','B','C','D'};
       char (*p3)[10] = &a;
       char (*p4)[10] = a;
       return 0;
    }
    

    这时p3+1 和p4+1 的值又是多少呢?

    得到的结果:
    (1).char (*p2)[5]=a;
    必须使用强制转换,如:

    char (*p2)[5]=(char (*)[5])a;

    (2).把数组长度改变,都会报编译不通过的错误提示:

    error C2440: 'initializing' : cannot convert from 'char (*)[5]' to 'char (*)[3]'
    
    error C2440: 'initializing' : cannot convert from 'char (*)[5]' to 'char (*)[10]'

    (3).把以上程序更改后成功运行代码如下:

    int main()
    
    {
    
      	char a[5]={'a','b','c','d'};
    
      	char (*p1)[5]= &a;
    
      	char (*p2)[5]=(char (*)[5])a;
    
    
      	printf("a=%d\n",a);
    
      	printf("a=%c\n",a[0]);
    
      	printf("p1=%c\n",**p1);
    
      	printf("p2=%c\n",**p2);
    
      	printf("p1+1=%c\n",**(p1+1));
    
      	printf("p2+1=%c\n",**(p2+1));
    
    
      	return 0;
    
    }

    运行结果:

    a=1638208
    
    a=a
    
    p1=a
    
    p2=a
    
    p1+1=?
    
    p2+1=?
    
    Press any key to continue

    后面的结果可以自己去试试看,得到的是什么。

    结论:

    根据指针类型及所指对象,表示指针大小,每次加1,表示增加指针类型大小的字节.

    展开全文
  • java对象占多少内存

    2016-01-29 22:34:00
    原始类型字段,不同类型大小各异(表1) 引用字段,占据4个字节(byte) 填充,在对象的末尾会有几个“浪费”了的字段,这样做是为了确保每个对象的开始地址都是字节的倍数。从而减少指向对象的指针的位数。 ...
  • 不同类型指针变量所分配的内存单元大小相等(32位pc机中4个字节)。指针分类:常量指针,变量指针和函数指针。数组名 是数组首元素的起始地址,但不是数组的起始地址。指针数组:是一个普通的数组。 type* p...
  • 通常来说Hotspot jvm的对内存中的对象由以下几个部分组成一个对象头,包含了一些整理工作所需信息原始类型字段,不同类型大小各异(表1)引用字段,占据4个字节(byte)填充,在对象的末尾会有几个“浪费”了的字段,...
  • 在X86系统中指针占4个字节宽度,在X64系统中指针占8个字节宽。2.假如p是指针*p是什么?sizeof(p)与sizeof(*p)的值分别是多少?*p是解引用,是指针指向数据的数值。定义时 *p为指针,使用时与所指向变量等价。sizeof...
  • 在X86系统中指针占4个字节宽度,在X64系统中指针占8个字节宽。 2.假如p是指针*p是什么?sizeof§与sizeof(*p)的值分别是多少? *p是解引用,是指针指向数据的数值。定义时 *p为指针,使用时与所指向变量等价。 ...
  • Delphi指针长度

    2013-10-26 22:31:00
    1.指针指向的内容的大小因数据类型不同不同指针本事的大小,都是4字节 2.sizeof函数是取形参所的内存大小 3.IntToHex是把整数型的值,转换为16进制的值,第二个参数是16进制的长度为多少位 program ...
  • 课程:指针 指针,在OC使用非常平凡,指针是非常重要的一个知识点,必须完全掌握,但在实际编程开发中,所涉及的指针知识并...不同的数据类型在内存中所字节数是不同的。 在声明指针变量时,用“*”号来标识这个变
  • 是用来计算变量或者对象、类型占字节多少。包含‘\0’。 总结如下,当参数分别如下时,sizeof返回的值表示的含义如下: 数组——编译时分配的数组空间大小; 指针——存储该指针所用的空间大小(在32位系统是4...
  • sizeof和strlen

    2013-07-11 15:14:34
    几种不同类型指针变量,请问sizeof(p)各是多少。   Sizeof 是c语言中判断数据类型或者表达式长度符,不是一个函数,字节数的计算是在时进行,而不是执行过程中计算的。 对于上述例子中,a为数组类型,sizeof...
  • c++ 面试题 总结

    2009-09-16 08:44:40
    一个指向char类型的const对象指针,p不是常量,我们可以修改p的值,使其指向不同的char,但是不能改变它指向非char对象,如: const char *p; char c1='a'; char c2='b'; p=&c1;//ok p=&c2;//ok *p=c1;//error (2)...
  • 本例说明,不同类型的量可以参与运算并相互赋值。其中的类型转换是由编译系统自动完成的。有关类型转换的规则将在以后介绍。 实型量 实型常量 实型也称为浮点型。实型常量也称为实数或者浮点数。在C语言中,实数...
  • 编程显示你使用的计算机中的各种数据类型字节数。 解: 源程序: #include <iostream.h> int main() { cout (int) ; cout (short) ; cout (long) ; cout (char) ; cout (float) ; cout (double) ; return 0; } ...
  • 岳维功 ortp-realease.pdf

    2020-12-24 04:00:17
    钟被划分了个时间块,如果每秒发送帧,那么,每·个帧的发送占多少个时间块 呢?当然是 。因此,我们根据定义“时间戳增量是发送第二个包相距 发送第一个包时的时间问隔”,故时间戳堦量应该为 关」中时间戳的计算问题:从...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    因为Linux与Windows不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失,使系统处于不稳定的状态,甚至在有的系统中会损坏硬件设备(硬盘)。在系统关机前使用 shutdown命令,系统管理员会通知所有...
  • 信号量的数据结构为一个值和一个指针指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程...
  • 6. 用2K×4位的RAM芯片组成16K字节的存储器,共需RAM芯片为多少 ( ) ① 16片 ② 8片 ③ 4片 ④ 32片 7. 8088最多能处理多少种中断 ( ) ① 128 ② 256 ③ 512 ④ 1024 8. 设8255...
  • 数据结构(C++)有关练习题

    热门讨论 2008-01-02 11:27:18
    内容及步骤: 1、 设计一个图的类,采用临接表法进行存储,该图每个结点的数据类型类模板的模板参数进行定义(注:需先设计一个结点类Node); 2、 为该类分别设计一个实现深度优先搜索和广度优先搜索的成员...
  • 系统复位时,单片机检查状态字节中的内容。如果状态字为0,则转去0000H 地址开始执行程序这是用户程序的正常起始地址。如果状态字不0, 则将引导 向量的值作为程序计数器的高8 位,低8 位固定为00H,若引导向量为FCH...

空空如也

空空如也

1 2
收藏数 28
精华内容 11
关键字:

不同类型指针占多少字节