POINT *pt=new POINT[1] 是什么意思

bykai 2004-01-20 02:59:08
POINT *pt=new POINT[1];
后面那个中括号中的1代表什么意思
pt[1].x=1;
pt[2].x=1;
pt[3].x=1;
pt[4].x=1;
这个又是什么意思,中括号中的数字代表什么,不是指针吗,应该用箭头,这么用圆点了呢?和pt->x=1;这样用法有什么区别
...全文
1447 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluebohe 2004-01-21
  • 打赏
  • 举报
回复
……
同意楼上意见
BalonFan 2004-01-21
  • 打赏
  • 举报
回复
同意titilima(李马),补充一下:C/C++对数组越界不做任何检查!
POINT* pt = new POINT;
这段代码执行后,只有
pt[0].x = 1;
是合法的,但
pt[1].x=1;
pt[2].x=1;
pt[3].x=1;
pt[4].x=1;
也不会导致编译器报错,但一执行就会非法操作。
vampireal 2004-01-21
  • 打赏
  • 举报
回复
各位都说的差不多了,不多说什么了,这个POINT一看应该是个点坐标,大概就是定义几个点,并规定一下坐标值了像pt[1].x=1;
pt[2].x=1;
pt[3].x=1;
pt[4].x=1;就是给坐标赋X值了,其他好象没什么了吧?
李马 2004-01-20
  • 打赏
  • 举报
回复
错,POINT *pt=new POINT[1];这种情况下只会有pt[0]一个,也就是说这一句相当于:
POINT *pt=new POINT;
至于为什么还有pt[1]、pt[2]、pt[3]、pt[4],这肯定和你的代码有关系,也许有个重新new的过程,仅凭你贴出来的代码而言:
pt[1].x=1;
pt[2].x=1;
pt[3].x=1;
pt[4].x=1;
这四个全是非法的越界操作。
bykai 2004-01-20
  • 打赏
  • 举报
回复
我已经懂了,还是有不明白的地方
POINT *pt=new POINT[1];
照你们说的有pt[0]和pt[1]两个,可是为什么pt[2].x=1;pt[3].x=1;pt[4].x=1也是可以用的,不是只有两个马,这么后面的也可以用?
BalonFan 2004-01-20
  • 打赏
  • 举报
回复
n可以是变量:

int n = 2;
CPoint* pt = new CPoint[n]; // 没问题!
BalonFan 2004-01-20
  • 打赏
  • 举报
回复
感谢titilima(李马)
偶差点误人子弟:P
BalonFan 2004-01-20
  • 打赏
  • 举报
回复
还可以这样写:

CPoint* pt = new CPoint[2];

CPoint* cur = pt;
++cur;
cur->x = 10; // 现在cur->x与cur[0].x或(pt+1)->x或pt[1].x等效

cout<< cur->x;

不知道搂主明白了没有^-^
李马 2004-01-20
  • 打赏
  • 举报
回复
n可以是变量,如:
void func(LPCTSTR str)
{
LPTSTR p = lstrcpy(new TCHAR[lstrlen(str) + 1], str);
// ...
}
zhangcrony 2004-01-20
  • 打赏
  • 举报
回复
數組啦﹗
BalonFan 2004-01-20
  • 打赏
  • 举报
回复
pt只是指向数组的第一个对象(当然也可以指向后面的对象),所以pt->x与pt[0].x等效。
而pt[1].x与(pt+1)->x等效:

CPoint* pt = new CPoint[2];

(pt+1)->x = 10; // 与pt[1].x = 10; 等效

cout<< (pt+1)->x; // 输出10
BalonFan 2004-01-20
  • 打赏
  • 举报
回复 1
看来搂主是没学过C++吧,应当补一补了,因为不会C++就很难学会MFC

POINT* pt = new POINT[n];
指的是开辟一块连续空间用于存放n个POINT对象(实际上就是一个数组),并用pt指向空间的首地址。n必须为常量!(或为const,或为1,2,3,4...)
在C/C++中,指向连续空间的指针都可以直接当作数组名使用:
int* p = new int;
p[0] = 10;

cout<< *p; // 输出:10
下面这段与上面这段等效
int* p = new int[1];
p[0] = 10;

cout<< *p; // 输出:10

pt[i]就表示pt指向的数组空间中的第i个POINT对象。注意,由于pt被声明为指向POINT对象的指针,所以使用pt[i]时,编译器知道应当偏移多少个字节。

16,547

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧