字符串指针偏移的问题。

Maverix3 2011-11-08 09:26:34
我做WIN32编程,然后用一个LPTSTR指针连接动态内存空间,然后对这个LPTSTR++进行偏移,为啥一下子就给我偏移出了4字节。
我就算用PSTR也是一样的结果。
就算是16bit unicode也应该一次偏移2字节啊,怎么就会一下偏移4字节啊。
谢谢大家!!
...全文
236 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Maverix3 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 demon__hunter 的回复:]
指针变量的类型影响着指针变量算术运算时的跨度,即指针变量+1时,指针变量的值会增加sizeof(指针所指向变量的类型)。
check是char **类型的指针变量,指向的类型是char *,so check++,check值增加sizeof(char*)
[/Quote]
[Quote=引用 10 楼 keiy 的回复:]

在32位编译器中,指针为32位(4个字节),所以它+1就会移动4个字节
LPTSTR *check=new LPTSTR[10];
check++;
如果你一定要它移动2个字节,可以
(char *)check=(char *)check+2;
但这样应该没什么意义
[/Quote]
[Quote=引用 6 楼 demon__hunter 的回复:]
指针变量的类型影响着指针变量算术运算时的跨度,即指针变量+1时,指针变量的值会增加sizeof(指针所指向变量的类型)。
check是char **类型的指针变量,指向的类型是char *,so check++,check值增加sizeof(char*)
[/Quote]
谢谢大家,问题解决了。
我改成LPTSTR check=new TCHAR[10]就没事了。
结贴给分了。
柯本 2011-11-08
  • 打赏
  • 举报
回复
在32位编译器中,指针为32位(4个字节),所以它+1就会移动4个字节
LPTSTR *check=new LPTSTR[10];
check++;
如果你一定要它移动2个字节,可以
(char *)check=(char *)check+2;
但这样应该没什么意义

nickwu1220 2011-11-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 maverix3 的回复:]
引用 5 楼 demon__hunter 的回复:

char **check=new char*[10]
check++
不是移动4个字节吗?

我就是想知道为啥移动四个字节,然后怎样才能移动两个字节。
[/Quote]
一个指针占4个字节啊
nickwu1220 2011-11-08
  • 打赏
  • 举报
回复
check是指针的指针,你申请了一个数组,数组类型是char*,check++当然是移动4个字节
Maverix3 2011-11-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 demon__hunter 的回复:]

char **check=new char*[10]
check++
不是移动4个字节吗?
[/Quote]
我就是想知道为啥移动四个字节,然后怎样才能移动两个字节。
机智的呆呆 2011-11-08
  • 打赏
  • 举报
回复
指针变量的类型影响着指针变量算术运算时的跨度,即指针变量+1时,指针变量的值会增加sizeof(指针所指向变量的类型)。
check是char **类型的指针变量,指向的类型是char *,so check++,check值增加sizeof(char*)
机智的呆呆 2011-11-08
  • 打赏
  • 举报
回复
char **check=new char*[10]
check++
不是移动4个字节吗?
Maverix3 2011-11-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 demon__hunter 的回复:]

引用 2 楼 maverix3 的回复:
引用 1 楼 demon__hunter 的回复:

方便的话贴代码吧


LPTSTR *check=new LPTSTR[10];
check++;

头文件里使用了UNICODE

LPTSTR 是个指针啊
[/Quote]

所以呢?
机智的呆呆 2011-11-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 maverix3 的回复:]
引用 1 楼 demon__hunter 的回复:

方便的话贴代码吧


LPTSTR *check=new LPTSTR[10];
check++;

头文件里使用了UNICODE
[/Quote]
LPTSTR 是个指针啊
Maverix3 2011-11-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 demon__hunter 的回复:]

方便的话贴代码吧
[/Quote]

LPTSTR *check=new LPTSTR[10];
check++;

头文件里使用了UNICODE
机智的呆呆 2011-11-08
  • 打赏
  • 举报
回复
方便的话贴代码吧

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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