gpt4 book ai didi

c - 数组索引之间的交换内存地址可能吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:02:14 25 4
gpt4 key购买 nike

我没有太多管理指针和其他高级函数的经验,但我在想是否有可能制定一种算法,使用指针在数组的两个元素之间交换内存地址,而不是复制和移动值每次(排序时的示例)。让我解释一下:

假设这个数组有 10 个元素未排序,我假装使用冒泡排序对它进行排序(以任何顺序),典型的方法是使用一个辅助变量来复制元素并在每次我使用它作为旁路找到更小或更大的数字(取决于降序或递增排序)。

            *----*----*----*----*----*----*----*----*----*----*
array[10] = | 45 | 21 | 32 | 48 | 32 | 22 | 47 | 10 | 11 | 12 |
*----*----*----*----*----*----*----*----*----*----*
^----- Imagine this is 10000

程序意识到数组 [ 1 ] 小于数组 [ 0 ],因此冒泡排序将使用辅助变量作为旁路来交换它们的值(这是典型的方式)。

                   *--------------* 
| ^
| |
*--------------*--------------*----*----*----*----*----*----*
array[10] = | 45 | 21 | 32 | 22 | 47 | 10 | 11 | 12 |
*--------------*--------------*----*----*----*----*----*----*
| ^
| *------* |
*-->|BYPASS|---*
*------*

所以不可能说交换 &array[0] 和 &array[1] 地址之类的东西吗?所以我避免了次要变量?在这种情况下 &array[1] = 10000; &array[0] = 10004。

感谢您的关注,采纳所有建议!

最佳答案

你可以这样做

 array[0] += array[1];
array[1] = array[0] - array[1];
array[0] -= array[1];

并且不使用第三个变量。

数组是连续的连续内存空间。你不能影响它的订购。它不是 LinkedList,您可以像那样交换指针。

关于c - 数组索引之间的交换内存地址可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13210317/

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