c++中指针型的解释 通俗易懂一点,不要用百度百科≥﹏≤

在c++中对数组应用sizeof得到的是数组的长度,对指针应用得到的是指针的长度。 求解释?_百度知道
在c++中对数组应用sizeof得到的是数组的长度,对指针应用得到的是指针的长度。 求解释?
便问一下,比如人计算,有没有其他方法,除用程序测出长度外,C++中的长度单位是什么
提问者采纳
需要知道数据类型,同时计算每个成员变量的相对地址。我以前做过统计结构体大小的小程序,可以得到整个数组分配的字节数(存储全部数据占用的内存字节数)对指针应用sizeof,可以手动计算; sizeof(p)=4字节对数组应用sizeof,也可代码控制和切换),只是得到分配给用来存储一个地址值的指针所用的字节数,是否有字节对齐(编译器选项,即4个字节,也就是你所说的“长度单位” 求大小。(上面都是在32位编译系统) C++中sizeof得到的是字节数; sizeof(a)=4*4=16字节 (int为4个字节)int *p=a数组int a[4]
提问者评价
谢谢了,能否留个QQ
来自团队:
其他类似问题
为您推荐:
sizeof的相关知识
其他4条回答
所以对指针SIZEOF,不同机器可能同一程序可能得到不同长度。因为指针存在的是它指向的地址。SIZEOF数组得到的是数组的长度。,得到的其实是这个地址的长度
sizeof()求得实际是分配的内存空间, 对数组sizeof其实不是他的长度,只有当数组是字符数组的时候才是,因为32位下,每个字符占一个字节长度,如果是整型数组sizeof的结果是 sizeof(int)* 数组长度,
至于指针, 他是一个指向变量的地址,本是在32位机器下占用4个字节长度。
c++的长度单位是字节。
当然除了用函数计算长度外, 当然可以人工计算,但是人工计算不一定正确, 不确定是多少为机器, 比如int ar[5]; 32位下人工计算是20.
但是机器计算比较好, sizeof(int) * 5 = 20
楼上回答不错,C++长度指的是变量,数组,指针等在内存中占用的字节数,c++长度可以手工计算,只需根据相就变量类型来推广算,常见的数据类型如 short int ,int,long int,float,double等等,这些分别占用相应字节数,计算机位数不同,占用字节数也不大相同,如上的占用字节数一般是 2,2,4,4,8。比如定义:float a[5],则可计算:4*5=20字节,跟sizeof得到的相同
路过,补充一下在32位的系统里sizeof(int)=4字节sizeof(long)=4字节 在64位的系统里sizeof(int)=4字节sizeof(long)=8字节,已在AIX上验证
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C++中在类内声明的指针为什么不需要new可以直接使用_百度知道
C++中在类内声明的指针为什么不需要new可以直接使用
提问者采纳
你在认真看一下,肯定是有new的?类中方法虽然没有new,但是在实例化这个对象时你说的是类中定义的方法使用这个指针吧
来自团队:
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C++中定义了一个类的指针*p,能把它当成数组名来用吗?_百度知道
C++中定义了一个类的指针*p,能把它当成数组名来用吗?
如果不行,可以吗,我想要用该类的第三个对象来调用其类中的成员函数,譬如用p[2]表示该类的第三个对象C++中,该怎么办,并用其调用该类中的成员函数
如果没有默认的构造函数,而由系统自动去调用,不可以的吗?
提问者采纳
P[2]就能指到第三个,只能自己把P移过去!如果是没半点关联的三个实例,这时你的P指向第一个时首先你声明这个类实例时要声明的是数组
其他类似问题
为您推荐:
其他2条回答
声明声明point *p=&a;调用时 p-&func()你可以这样:比如有个类叫point
可以的,p[2].函数名就行,比如classname *p=new classname [5];p[2].xx(); 不过这样写的前提是你的类要有默认的构造函数
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁为什么C++中千万不要返回局部对象或变量的引用和指针_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
为什么C++中千万不要返回局部对象或变量的引用和指针
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
下载文档到电脑,查找使用更方便
还剩1页未读,继续阅读
你可能喜欢C/C++中,void*指针做形参的问题,下面swap函数,为何要强转为usigned char *型?能否解析一下这个函数?_百度知道
C/C++中,void*指针做形参的问题,下面swap函数,为何要强转为usigned char *型?能否解析一下这个函数?
pcData2++;
= *pcData1;%d\i++)
printf(&i&lt#include&lt,sizeof(a)); 0), int iDataSize) {
unsigned char
*pcData1 = NULL;
} while (--iDataSize &
swap(a.h&gt,b,4;
pcData2 = (unsigned char *)pvData2;
pcData1 = (unsigned char *)pvData1;
unsigned char
ucTmp1,10},2;void swap (void *pvData1;
void main(){
int a[]={1,9,3;n&sizeof(a)&#47, void *pvData2;stdio,5};
unsigned char
*pcData2 = NULL;4;
for(int i=0;
= *pcData2,8;
int b[]={6,a[i]);
pcData1++;,7
提问者采纳
b;*p=&int&nbsp:char变量如果是被一个负的数给赋值了,否则如果iDataSize不是偶数。所以为了防止可移植性错误,用unsigned是为了防止char的符号特性:int&nbsp,就最好声明这个变量是unsigned的(没有正负符号);a=5,最后几位就没有办法安全地复制了,必须选择一个1个字节的数据类型?首先,必须把void*转化成为别的类型;void&nbsp。为什么选择unsigned char作为被指向的类型呢,变成正的;b=*p;a;所以要访问p指向的空间中的数据,就会自动加一个绝对值。(除不尽)其次。某些机器上void*指针不可以进行如下操作
提问者评价
你答的真好,集众家所长,很到位!同时也感谢楼上几位大师
其他类似问题
为您推荐:
其他3条回答
这个void*目的是传入任意类型的指针,将所有的指针都按照字节读取,第三个参数是计算的字节数,这个缓冲区可以是数组也可以是字符串甚至其他任意类型,所以用char*或byte*都可以,内部其实可以改成int *来实现将一段长度为iDataSize的缓冲区互换类型匹配
这个很正常,因为 pvData1; pvData2; 可能是任何一种形态,转成 unsigned char 後,才能够一个一个互换,保证换过後资料的一致性。
换成unsigned char*
和 换成 char * 有啥区别吗?
一般也不是不行,但是有符号的状况,万一你的 complier 不长眼,是有可能会出错。所以为了避免其他的干扰,通常是直接定义为 unsigned char.
函数的参数为void*, 可以是任意类型指针,要保证pvData1和pvData2指针的类型一致, 所以都强制转换为unsigned char
为什么一定要选择unsigned char* 啊?不能选择其他类型吗?谢谢
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 彪悍的人笙不需要解释 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信