在C ++中增加一个char指针
Increment a char pointer in c++
我正在处理 Cracking the Coding Interview 中的一个问题。问题是:编写代码来反转 C 风格的字符串。
这是我得到的用 C++ 编写的答案,但我不明白增加一个字符指针背后的含义。
void swap(char &a, char &b){
a = a^b;
b = a^b;
a = a^b;
}
void reverse1(char *s){
if(!s) return;
char *p = s, *q = s;
while(*q) ++q;
--q;
while(p < q)
swap(*p++, *q--);
}
我不明白的部分在第一个 while 循环的第二个函数中。 *p
的条件是什么?为什么增量 q
会截断字符串中的起始字符?
例如,如果
char s[] = "1234567890";
将 s
传递给函数 reverse1
后,为什么 ++q
会得到像 "234567890"
这样的结果?
这就是终止字符串的'[=11=]'
的问题。
结果是:
0987654321
正如调用 reverse 的函数所预期的那样(在 Visual Studio 2013
中)
C 风格的字符串以 null(0x00 或 /0)结尾。
char s[] = "1234567890";
会这样存储在内存中:
0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38 0x39 0x30 0x00
第一个 while 循环正在搜索字符串结尾。
在 while 循环开始时 q
指向 0x31
。
在每次迭代中,q 递增以指向下一个内存位置。
当q
指向0x00
时循环中断。
p
和 q
是指向 char
的指针,并且都被初始化为 string s[]
中第一个 char
的地址(作为名称C
中的数组是指向其第一个元素的指针)。 while (*q) q++;
增加q
(char
的位置)直到到达字符串的末尾(NULL
字符'[=20=]'
)。并且 --q
减少指向 NULL
char 之前的位置,这是字符串的最后一个元素 (char)。
这就是为什么在将字符串传递给 reverse1()
并执行 ++q
后,结果将从第二个字符而不是第一个字符开始。
字符串是数组。 q 指向字符串的第一个字符。所以当你增加 q 时。 q 将指向下一个字符。
我正在处理 Cracking the Coding Interview 中的一个问题。问题是:编写代码来反转 C 风格的字符串。 这是我得到的用 C++ 编写的答案,但我不明白增加一个字符指针背后的含义。
void swap(char &a, char &b){
a = a^b;
b = a^b;
a = a^b;
}
void reverse1(char *s){
if(!s) return;
char *p = s, *q = s;
while(*q) ++q;
--q;
while(p < q)
swap(*p++, *q--);
}
我不明白的部分在第一个 while 循环的第二个函数中。 *p
的条件是什么?为什么增量 q
会截断字符串中的起始字符?
例如,如果
char s[] = "1234567890";
将 s
传递给函数 reverse1
后,为什么 ++q
会得到像 "234567890"
这样的结果?
这就是终止字符串的'[=11=]'
的问题。
结果是:
0987654321
正如调用 reverse 的函数所预期的那样(在 Visual Studio 2013
中)
C 风格的字符串以 null(0x00 或 /0)结尾。
char s[] = "1234567890";
会这样存储在内存中:
0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38 0x39 0x30 0x00
第一个 while 循环正在搜索字符串结尾。
在 while 循环开始时 q
指向 0x31
。
在每次迭代中,q 递增以指向下一个内存位置。
当q
指向0x00
时循环中断。
p
和 q
是指向 char
的指针,并且都被初始化为 string s[]
中第一个 char
的地址(作为名称C
中的数组是指向其第一个元素的指针)。 while (*q) q++;
增加q
(char
的位置)直到到达字符串的末尾(NULL
字符'[=20=]'
)。并且 --q
减少指向 NULL
char 之前的位置,这是字符串的最后一个元素 (char)。
这就是为什么在将字符串传递给 reverse1()
并执行 ++q
后,结果将从第二个字符而不是第一个字符开始。
字符串是数组。 q 指向字符串的第一个字符。所以当你增加 q 时。 q 将指向下一个字符。