c - 将两个指针交换为指针

标签 c arrays pointers

我有一个函数,它接受一个指向数组的指针(所以是一个 int**)。在此函数中,我想调用 swap(int*, int*) 来交换数组中两个元素的位置。在 C 中交换这两个元素的语法是什么?

这是我正在寻找的示例:

int* do_something(int** arr) {
    // assume i and j are valid locations in the array
    swap(&arr[i], &arr[j]); // what should this line be?
}

// this function works fine, no changes needed
void swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

最佳答案

我不清楚 arr 是什么。是int*数组,还是指向int数组的指针?

选项1:arrint*的数组:

您的交换函数交换 int 变量,但您需要交换 int* 变量。因此,您需要在交换函数中使用额外的间接级别。

void swap(int** a, int** b) 
{
    int* temp = *a;
    *a = *b;
    *b = temp;
}

选项2:arr是指向int数组的指针:

在这种情况下,您希望交换两个 int 值,问题中出现的 swap 的变体就是这样做的。问题是您错误地定义了 do_something。它应该接收一个 int* 并像这样实现:

void do_something(int* arr, int i, int j) 
{
    swap(&arr[i], &arr[j]);
}

关于c - 将两个指针交换为指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26367886/

相关文章:

c - 在 C 中模拟空指针未定义行为

c - 来自不相关 block 的指针的比较(>,> =,<,<=)

objective-c - 在 Swift 中访问 Objective-C 指针

c - 函数调用后输出不同的值?

java - 打印字符数组输出空框?

c++ - 指针和引用问题(链表)

c - Arduino 处理开放网络套接字

c - 我如何比较这个变量以便可以在 switch 语句中使用它?

c - 获取文件中元素的数量

c++ - C++中具有可变尺寸的二维数组