这个函数如何交换工作?我无法理解

时间:2015-06-15 20:37:02

标签: function recursion

我无法理解交换功能如何进行交换

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);
}

1 个答案:

答案 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