请选择 进入手机版 | 继续访问电脑版
hot【项目分享】之智能交通灯

结合前几次GPIO的简单了解和学习,今天给大家分享一个GPIO的简单应用:智能交通灯 涉及硬件:开发套件 详细

开启左侧

如何正确获取new开辟空间的大小

[复制链接]
李冰旋 发表于 2017-4-5 16:53:08 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
如何正确获取new开辟空间的大小
悬赏1金钱 状态已解决,大家来学习学习
问题描述Question Issues
本帖最后由 李冰旋 于 2017-4-5 16:54 编辑

下面是两段程序
程序一:
  • #include <iostream>
  • using namespace std;
  • class Myclass
  • {
  • public:
  •     Myclass (int a,int b);
  • private:
  •     int m_a;
  •     int m_b;
  •     static int sum;
  • };
  • int Myclass::sum = 0;
  • Myclass::Myclass(int a,int b)
  • {
  •     m_a = a;
  •     m_b = b;
  • }
  • int main()
  • {
  •     Myclass *M = new Myclass(3,7);
  •     cout << sizeof(*M);  //结果为8
  • }
程序二:

#include <iostream>
using namespace std;

int main()
{
    char *p = new char [100];
    cout << sizeof(*p) << endl;
}      //结果为1

为什么第二段程序的结果和第一段的不一致呢,如果程序1的结果是8,程序二的结果不该是100吗,求解

最佳答案

查看完整内容

亲,还是sizeof的问题 1、sizeof有三种语法形式,如下: 1) sizeof( object ); // sizeof( 对象 ); 2) sizeof( type_name ); // sizeof( 类型 ); 3) sizeof object; // sizeof 对象; 2、数组的sizeof值等于数组所占用的内存字节数,如: [mw_shl_code=c,true]char a1[] = "abc"; int a2[3]; sizeof( a1 ); // 结果为4,字符 末尾还存在一个NULL终止符 sizeof( a2 ); // 结果为3*4=12(依赖于int)[/mw_shl_code] 3、指针变量的size ...

精彩评论8

高敬锋 发表于 2017-4-5 16:53:09 | 显示全部楼层
亲,还是sizeof的问题
1、sizeof有三种语法形式,如下:
1) sizeof( object ); // sizeof( 对象 );
2) sizeof( type_name ); // sizeof( 类型 );
3) sizeof object; // sizeof 对象;
2、数组的sizeof值等于数组所占用的内存字节数,如:
[mw_shl_code=c,true]char a1[] = "abc";
int a2[3];
sizeof( a1 ); // 结果为4,字符 末尾还存在一个NULL终止符
sizeof( a2 ); // 结果为3*4=12(依赖于int)[/mw_shl_code]

3、指针变量的sizeof
学过数据结构的你应该知道指针是一个很重要的概念,它记录了另一个对象的地址。既然是来存放地址的,那么它当然等于计算机内部地址总线的宽度。所以在32位计算机中,一个指针变量的返回值必定是4(注意结果是以字节为单位)

两个问题的答案,楼上回答的很好。


回复

使用道具 举报

JOKER 发表于 2017-4-5 18:53:59 | 显示全部楼层
第一个程序,M指向的是该对象在栈空间的地址,并不包含在静态数据区的数据成员
第二个程序,*p指的是p[0]吧,因为是char型的 ,所以大小是1。

点评

感谢回答  发表于 2017-4-5 23:31
HELLO WORLD
回复

使用道具 举报

高敬锋 发表于 2017-4-5 20:51:20 | 显示全部楼层
JOKER 发表于 2017-4-5 18:53
第一个程序,M指向的是该对象在栈空间的地址,并不包含在静态数据区的数据成员
第二个程序,*p指的是p[0]吧 ...

new的对象在堆上
回复

使用道具 举报

 楼主| 李冰旋 发表于 2017-4-5 23:37:27 | 显示全部楼层
高敬锋 发表于 2017-4-5 16:53
亲,还是sizeof的问题
1、sizeof有三种语法形式,如下:
1) sizeof( object ); // sizeof( 对象 );

感谢,回答很详细,sizeof语法1和语法3有什么区别吗,放到程序里运行结果是一样的
回复

使用道具 举报

高敬锋 发表于 2017-4-6 09:10:08 | 显示全部楼层
李冰旋 发表于 2017-4-5 23:37
感谢,回答很详细,sizeof语法1和语法3有什么区别吗,放到程序里运行结果是一样的 ...

没有区别,哈哈哈,只是两种写法知道就好。关于sizeof还有很多知识点,比如sizeof对一个表达式求值,sizeof对一个函数调用求值,sizeof的计算发生在编译时还是运行时等等。
我觉得你应该多去互联网找答案,百度一下,看看那些前辈们的总结,会很有收获的。
回复

使用道具 举报

 楼主| 李冰旋 发表于 2017-4-7 12:06:27 | 显示全部楼层
高敬锋 发表于 2017-4-6 09:10
没有区别,哈哈哈,只是两种写法知道就好。关于sizeof还有很多知识点,比如sizeof对一个表达式求值,size ...

确实如此,不过有些问题不太好描述
回复

使用道具 举报

何鑫 发表于 2017-4-7 23:00:59 | 显示全部楼层
高敬锋 发表于 2017-4-5 16:53
亲,还是sizeof的问题
1、sizeof有三种语法形式,如下:
1) sizeof( object ); // sizeof( 对象 );

回答的很奈斯啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
阅读排行 更多
广告位
0351-8210788
周一至周日 9:00-18:00
意见反馈:mind@unigress.com
关注我们

扫一扫关注我们

Powered by Discuz! X3.4 Licensed  © 2001-2013 Comsenz Inc.( 晋ICP备12005011 )