如果你说是地址的位置,我个人认为是随机的,我记得好像是放在static地址的下面,对了,如果不是static类型,是放在栈里面的.如果是动态分配的,就是放在heap(堆)注意,栈跟堆是不同的,栈会自动退栈,堆要手动释放.这些都是我个人的猜测,说错了请指出
基本上随机,但不是绝对
嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
我给出我的看法
pt == (int *)0X000000; (当然这里系统做了类型转换,但在我概念里, pt 与 0X000000是绝对不同的,前者是指针,后者是地址,是指针的值,你不能说指针的值就是指针本身)
如果你的pt是这样定义的
void *pt=new int[5];
那么我认为
pt==0x000000;
因为刚开始设计指针,大家只关心和利用它的值,而不关心它的地址
所以pt本身被设计成他指的值.pt==0x000000
而且,最主要一点,指针就是地址
再来说一句,我没有打快,只是你们误解我的意思,请看清楚我说的话,我是说类型相同,他们返回值的类型是相同的
我知道int(5)和int[5]不是一个概念,但是我的帖子是说,这两个都是调用的new函数.
(new int(5))和(new int[5])是同一种类型,请看清楚后再说 不同
51楼:
竟然说new int(5)和new int[5]类型会不同,你可不要闹笑话哦
53楼:
我没说啊
你为什么总歪曲我的话呢
请你明确指出我哪个帖子中的哪句话是这个意思
让大家评评是我表达不正确
还是你理解不正确
你看看上面的话,是否不好意思了呢?
要端正态度再来看别人的言论
我看了看MSDN,new和new[]的函数原型都是返回void*;
但是会因为在int*p=new int[10];时知道p是指向什么类型的指针。
至于为什么编译器会知道,我想是因为编译器会判断分配的内存是分配给什么类型的,以什么形式分配的。
所以仍然只能int*p=new int;或者void *p=new int;而不能double *p=new int;
但是C++不支持直接对void*“做动作”比如输出,就不能cout<<*(void*)p<<endl;
这是在“2重指针问题”93楼我说的话。虽然没说很具体,我表达能力有问题,但是是否已经说明:
cout<<*(new int(5));可以成立与cout<<*(void*)p<<endl;不成立的矛盾,显示出new int(5)不会是void*的类型呢?
所以不要断章取义