C++ (char*)(msg+;1)这个+;1带我们去哪里?

C++ (char*)(msg+;1)这个+;1带我们去哪里?,c++,pointers,c++11,char,C++,Pointers,C++11,Char,我看到一个代码,其中有一个语句(char*)(emsg+1) 我猜(char*)emsg可能是一个字符串,但是这个+1在这里做什么呢?emsg是指向某个类型的指针(例如int)emsg+1将指针递增1,即指向初始地址+sizeof(int)。然后,(char*)(emsg+1)是一个强制转换,即最终结果被强制转换为一个char*指针,因此您最终得到一个指向char的指针,该指针指向初始地址+sizeof(int) 通常,char*是指向字符的指针,即C——类似于以零结尾的字符串,但情况并非总是如

我看到一个代码,其中有一个语句
(char*)(emsg+1)


我猜
(char*)emsg
可能是一个字符串,但是这个
+1
在这里做什么呢?

emsg
是指向某个类型的指针(例如
int
emsg+1
将指针递增1,即指向初始地址+
sizeof(int)
。然后,
(char*)(emsg+1)
是一个强制转换,即最终结果被强制转换为一个
char*
指针,因此您最终得到一个指向char的指针,该指针指向初始地址+
sizeof(int)


通常,
char*
是指向字符的指针,即
C
——类似于以零结尾的字符串,但情况并非总是如此。当您想要“提取”可寻址内存的最小单位时,您通常会将指针转换为
char*
,因为在大多数机器上
char*
是指向一个字节的底层类型(
char
)的指针。

emsg
是指向某种类型(例如
int
)的指针
emsg+1
将指针递增1,即指向初始地址+
sizeof(int)
。然后,
(char*)(emsg+1)
是一个强制转换,即最终结果被强制转换为一个
char*
指针,因此您最终得到一个指向char的指针,该指针指向初始地址+
sizeof(int)


通常,
char*
是指向字符的指针,即
C
——类似于以零结尾的字符串,但情况并非总是如此。当您想“提取”可寻址内存的最小单位时,通常会将指针转换为
char*
,因为在大多数机器上
char*
是指向一个字节(
char
)的底层类型的指针。

这取决于
emsg
的类型,但它似乎在做指针运算。这取决于
emsg
的类型,但它似乎在做指针运算。为了澄清,当你说“+sizeof(int)”时,你的意思是“由sizeof(int)字节高级”。@MattMcNabb是的,事实上,我的意思是
+
作为“添加到”或“高级”。因此我们也可以写(char*)(emsg+sizeof)(int))如果我们写(char*)(emsg+1)+1,最后一个在括号外会发生什么。@BhavyaArora指针有一个类型,所以当你做
emsg+n
时,指针“知道”前进
n
倍于基础类型的大小。因此,在你的例子中,如果你做
emsg+sizeof(int)
,然后指针前进
sizeof(int)*sizeof(int)
,这不是您想要的。在递增指针时,不需要(实际上是不正确的)使用
sizeof
,指针的类型指示指针在递增时“跳跃”的字节数。要澄清,当您说“+sizeof(int)”时是的,我的意思是
+
作为“添加到”或“高级”。所以我们也可以写(char*)(emsg+sizeof(int)),如果我们写(char*)(emsg+1)+1,最后一个会发生什么?BhavyaArora指针有一个类型,所以当你写
emsg+n
,指针“知道”前进
n
乘以基础类型的大小。因此,在您的情况下,如果执行
emsg+sizeof(int)
,则指针前进
sizeof(int)*sizeof(int)
,这不是您想要的。没有必要(实际上是不正确的)要在递增指针时使用
sizeof
,指针的类型决定了递增指针时指针“跳跃”的字节数。