gpt4 book ai didi

c - 为什么这个交换工作而另一个不工作

转载 作者:太空狗 更新时间:2023-10-29 15:54:16 24 4
gpt4 key购买 nike

我正在帮助我的 friend 完成一项作业,我已经有一段时间没有使用 C 了,所以我无法找到为什么它有效,但第一个代码有效而第二个代码无效。这不是作业,因为我们已经弄清楚了,但我想知道为什么会这样。

void GnomeSort( int gnomes[], int length ) {

int pos = 1;

while ( pos < length ) {

if ( gnomes[ pos ] >= gnomes[ pos - 1 ] ) {

pos = pos + 1;
}
else {

swap( gnomes + pos, gnomes + pos - 1 );
if ( pos > 1 ) {

pos = pos - 1;
}
}
}
return;
}

这行不通:

void GnomeSort( int gnomes[], int length ) {

int pos = 1;

while ( pos < length ) {

if ( gnomes[ pos ] >= gnomes[ pos - 1 ] ) {

pos = pos + 1;
}
else {

swap( gnomes[ pos ], gnomes[ pos - 1 ] );
if ( pos > 1 ) {

pos = pos - 1;
}
}
}
return;
}

区别在于 swap 调用:

swap( gnomes + pos, gnomes + pos - 1 );

相对于:

swap( gnomes[ pos ], gnomes[ pos - 1 ] );

这是无法更改的 Swap 函数:

void swap(int* ptrA, int* ptrB) {
int temp = *ptrA;
*ptrA = *ptrB;
*ptrB = temp;
return;
}

显然是在交换函数的输入中,但它是这样的吗?您还可以通过哪些其他方式将输入输入到交换函数中?

最佳答案

这是因为 gnomes + pos 不等同于 gnomes[pos]

  • gnomes + pos 将返回一个指针值。这是因为 pointerType + integerType => pointerType

  • gnome[pos] 实际上是 *(gnomes+pos),因此您最终传递了一个取消引用的指针值,一个 int 在你的例子中,到 swap 函数。

你的编译器应该给你一个错误,或者至少是一个警告。

关于c - 为什么这个交换工作而另一个不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40944125/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com