我的问题是:为什么会出现“ - p”,据我所知,“++ p”函数用于攀爬一些虚构的数组指针,但“ - p”是为了什么?我意识到没有它,代码字母不会显示,但不明白这是如何工作的。谢谢,甚至更多
代码:
#include <stdio.h>
using namespace std;
int main()
{
char* p = new char [12];
*p=0x48;
++p;
*p=0x65;
++p;
*p=0x6c;
++p;
*p=0x6c;
++p;
*p=0x6f;
++p;
*p=0x20;
++p;
*p=0x57;
++p;
*p=0x6f;
++p;
*p=0x72;
++p;
*p=0x6c;
++p;
*p=0x64;
++p;
*p=0x0;
++p;
--p;
--p;
--p;
--p;
--p;
--p;
--p;
--p;
--p;
--p;
--p;
--p;
printf(p);
delete p;
return 0 ;
}
答案 0 :(得分:1)
char *p = _ _ _ _ _ _ _ _ _ _ _ _
/\
最初p
指向数组的开头,如图所示
p++ == ++p == (p = p+1)
所以这会将指针向前移动一个位置移到右侧。
p-- == --p == (p = p-1)
所以这会将指针移回一个位置到 left 。
答案 1 :(得分:0)
那些使p
指向刚刚写入的字符串的开头。
有几种方法可以改善这一切,例如:
p -= 12; // instead of all the --p
或
strcpy (p, "\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64");
或
p = new string ("\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64");
甚至:
*p++ =0x48;
*p++ =0x65;
*p++ =0x6c;
*p++ =0x6c;
*p++ =0x6f;
*p++ =0x20;
*p++ =0x57;
*p++ =0x6f;
*p++ =0x72;
*p++ =0x6c;
*p++ =0x64;
*p =0x0;
p -= 11;
或者,直接和直观:
int main ()
{
printf ("Hello World");
return 0;
}
答案 2 :(得分:0)
我非常希望这样做:
char *p = new char[13];
char *q = p;
*p=0x48;
++p;
*p=0x65;
++p;
*p=0x6c;
++p;
*p=0x6c;
++p;
*p=0x6f;
++p;
*p=0x20;
++p;
*p=0x57;
++p;
*p=0x6f;
++p;
*p=0x72;
++p;
*p=0x6c;
++p;
*p=0x64;
++p;
*p=0x0;
++p;
printf(q);
但实质是因为它需要移动--p
以“反向回到开头”,作为设置字符串的++ p的计数器。
[没有运行它,我可以看到它打印Hello World
]