为什么这段代码能做到它的功能呢?

时间:2013-09-24 16:17:39

标签: c sorting

有人发布了这个最近的问题。这是链接:
Output sorted in a weird way

我知道这是怎么回事,但我想弄清楚的是,为什么它按原样产生输出? 将getch()更改为getchar()后,我编译了它并运行了几次。它总是会改变first 4 letters。我无法看到where这种变化实际上发生在代码中 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

这发生在swap函数:

//swapping function
void swap(char **first, char **second)
...

OP假设'char *'是一个整数类型,移动它会移动字符串。第二部分是这个交换函数应该接受指针到数据,而不是实际数据。它交换数据的地址,不会触及数据本身。

然而,当使用char * *调用时,它会出错。这会将数据交换到'指向'的地址。但是输入不是“指向指针”的指针。

'Pointer to'在大多数系统上都有sizeof int(其中'most'是主观评估 - 搜索“sizeof指针”用于讨论和观点)。因此,此例程不会将字符串交换为指向字符串的指针,而是将整数交换到目标地址。由于整数是根据结果在OP的机器上长4个字节,因此代码“交换”目标字符串的前四个字节。

答案 1 :(得分:1)

更改发生在OP帖子中的错误功能swap()Output sorted in a weird way

char *temp;
...
void swap(char **first, char **second) {
  temp = *second;  // Copy 4-byte pointer
  *second = *first;// Copy 4-byte pointer
  *first = temp;   // Copy 4-byte pointer
}