1

誰かが投稿したこの最近の質問があります。リンクは次のとおりです。
奇妙な方法でソートされた出力

私はそれがどのように間違っているかを知っていますが、私が理解しようとしているのは、なぜそれがそのままの出力を生成するのですか?
に変更getch()した後getchar()、コンパイルして数回実行しました。常に変化しますfirst 4 letterswhereこの変更が実際にコードで行われることはわかりません。
どんな助けでも大歓迎です。

4

2 に答える 2

3

これは次のswap関数で発生します。

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

OPは「char *」が整数型であると想定しており、それを移動すると文字列が移動します。2 番目の部分は、この swap 関数は、実際のデータではなく、データへのポインターを受け入れる必要があるということです。データのアドレスを交換し、データ自体には触れません。

ただし、で呼び出すとchar * *、うまくいきません。これは、「a pointer to」のアドレスでデータをスワップします。しかし、入力は「ポインターからポインターへ」ではありませんでした。

「へのポインター」にはsizeof intほとんどのシステムがあります (「ほとんど」は主観的な評価です。ディスカッションや意見については、「ポインターのサイズ」を検索してください)。したがって、このルーチンは文字列または文字列へのポインタではなく、ターゲット アドレスで整数をスワップします。結果によると、整数は OP のマシン上で 4 バイトの長さであるため、コードはターゲット文字列の最初の 4 バイトを「交換」します。

于 2013-09-24T16:43:45.740 に答える
1

swap()OP 投稿 の誤った関数で変更が行われる出力が奇妙な方法でソートされる

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
}
于 2013-09-24T16:44:46.843 に答える