我无法理解交换功能如何进行交换
void swap(char* p, char* q)
{
char tmp = *p;
*p = *q;
*q = tmp;
}
int h(char* s, int n)
{
if (s[n]==0) {
return 0;
}
if (s[n+1]==0) {
return 1;
}
int k = h(s+1,n+1);
swap(s,s+k+1); //how does this work?
return k+2;
}
void func3()
{
char s[] = "intro to cs";
int x = h(s,0);
printf("x = %d\n", x);
printf("s = %s\n", s);
}
答案 0 :(得分:0)
swap(s,s+k+1); //how does this work?
这里s
是一个指向包含一系列字符的内存块的指针。 swap函数接受两个指向字符的指针,并获取指向的值并交换它们。在以下示例中,
|-------|
s | 'i' |
|-------|
s+1 | 'n' |
|-------|
s+2 | 't' |
|-------|
s+3 | 'r' |
|-------|
s+4 | 'o' |
|-------|
...
您可以通过调用'i'
来交换字符'r'
和swap(s, s+3)
。这将采用地址s
('i'
)的内容并将其存储在地址s+3
中,反之亦然。在您的示例中,您正在使用指针算法。 s
是包含字符(如数组)的连续内存块,因此您可以通过执行ith
或等效s[i]
来获取序列中的*(s + i)
字符。 s
是字符串的基地址,因此要获取字符'r'
的地址,我们只需将3
添加到基地址(s
)