好的,上面就是你所有的疑问了吧,好,我把他们全部说完。
我没看出来你这两个例子想反驳我的哪条观点
因为我没发现你有什么观点。
另外我注意到你在"第一种方法"中已经对5楼原来的错误做了修正
我在开始的时候,本只是想大概的给出思路,或许是不清楚的,没想到有您这样的有心人,想要刨根问底,所以做出了全部详尽的说明。
new int[n] 究竟是什么类型的指针,这一点目前你我有争议(我现在根据 热情依然 网友的提示,认为 它是一个 void *)
我看了看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;
9楼 :"pt指向一个整型数组(大小10)"
就相当于有一个int[9],里面存储如下(它们的下面表示他们的地址):
pt(=A)-> [1]-[2]-[3]-[4]-[5]-[6]-[7]-[8]-[9]
address A B C D E F G H I
那么pt会指向[1],即:pt的值是[1]的地址A。
&arr[0]是指针,其含义比"&arr[0]表示的是地址"丰富、全面
这里在探讨指针指向数组的首地址,所以这里把他说成地址,更容易让人理解我说的主题和思想。
&arr[0]是常量或者说具有常量性质,不是左值,不可以被赋值
我是想说&arr[0]赋值给他的左边。如:int *p=&arr[0];
这样是为了说明: 指针->“存储”->“它指向数据的类型”->的地址。
[此贴子已经被作者于2006-7-23 19:38:14编辑过]