| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5172 人关注过本帖
标题:myajax95斑竹,我要求你把那个帖子解开
只看楼主 加入收藏
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
wo gang gang kan le yi xie wang ye, fa xian hen duo ren zai wu dao da jia. Hen yi han, na xie suo wei de zhuan jia, zai wo kan lai, bu dong shen me shi OOP.

bi ru xia mian zhe ge lian jie. Wan quan shi zai luan shuo.
http://www.yesky.com/25/165025.shtml

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2006-07-24 22:47
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
以下是引用穆扬在2006-7-24 22:37:38的发言:
我8楼问题中的是哪一种呢?
“但我不清楚new int[10]是什么样的指针,麻烦你能否告诉我一声"


这个是调用 operator new[](size_t) 这个如果你是调用全局的,不是自己在类里面定义的,那么缺省行为都是调用operator new,也就是返回一个指向 连续分配的10*sizeof(int)大小的内存的首地址

c++/C + 汇编 = 天下无敌
2006-07-24 22:48
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-24 22:53
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
以下是引用热情依然在2006-7-24 22:48:12的发言:


这个是调用 operator new[](size_t) 这个如果你是调用全局的,不是自己在类里面定义的,那么缺省行为都是调用operator new,也就是返回一个指向 连续分配的10*sizeof(int)大小的内存的首地址

这句说错了,应该是operator new[]重载运算符号,不是内建立类型, new int[10]这个动作默认将引发 new operator
那么缺省行为是调用operator new,也就是返回一个指向 连续分配的10*sizeof(int)大小的内存的首地址


c++/C + 汇编 = 天下无敌
2006-07-24 22:54
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-24 22:57
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

恩,好的,既然你认为new int(5);是一个void*指针?
那么请问以下哪些不合法:
1、cout<<*(new int(5))<<endl;
2、cout<<*(void*)(new int(5))<<endl;
3、void*p=new int(5);cout<<*p<<endl;
4、void*p=new int(5);cout<<*(int*)p<<endl;
你如果实验过。应该知道1和4才是正确的(不可能对*(void*)做cout)。
那么如果new int(5)是void*那么必然是不允许*(new int(5))的。

不错,我在MSDN上查过,是的确返回的void*,我想编译器自然也会因为new函数中的int而将void*转换成int*了。

不管MSDN上怎么说,总的来说就上面4个例子是绝对能够说明一切的


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-24 22:59
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
以下是引用热情依然在2006-7-24 22:48:12的发言:


这个是调用 operator new[](size_t) 这个如果你是调用全局的,不是自己在类里面定义的,那么缺省行为都是调用operator new,也就是返回一个指向 连续分配的10*sizeof(int)大小的内存的首地址

这句说错了,应该是operator new[]重载运算符号,不是内建立类型, new int[10]这个动作默认将引发 new operator
那么缺省行为是调用operator new,也就是返回一个指向 连续分配的10*sizeof(int)大小的内存的首地址


c++/C + 汇编 = 天下无敌
2006-07-24 23:00
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-24 23:02
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
以下是引用穆扬在2006-7-24 22:57:07的发言:
具体的类型怎么写
int (*)[10] 吗?
确定吗?

你这样些的话 就要 int(*p)[10] = new int[X][10]了,X代表任意常量整数;
C++中不一定要int(*)[]这种才是指向一行指针
我不明白你的是 []这个符号有什么难以明白的地方??本来 10*sizeof(int)每一份就是int的类型
当你 int *p = new int[10];p [0],p[1].....之类的都是相隔4个字节;
那么获得的值是完全正确的,为什么一定要 int(*p)[]才可以是指向行数组???


c++/C + 汇编 = 天下无敌
2006-07-24 23:09
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-24 23:10
快速回复:myajax95斑竹,我要求你把那个帖子解开
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031176 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved