在 VS Studio 中调试如何显示整个数组

debugging in VS Studio how to display whole array

我正在 VS Studio 中调试 C 程序。我已经下载并成功设置了 MinGw。我遇到了无法在调试 window 中显示 int array[4] 的所有内容的问题。我的数组 A 出现在调试 window 中。我双击它,但它只显示第一个值 10。任何建议表示赞赏(我尝试双击它,像使用 GDB 一样写入调试控制台 p A,但这些不起作用)。

`

我正在调试以下代码:

#include <stdio.h>
void quickSort(int * A, int p, int r);
int partition(int * A, int p, int r);

void quickSort(int * A, int p, int r)
{
    if(p < r)
    {
        int q = partition(A, p, r);
        quickSort(A, p, r); // first half
        quickSort(A, q + 1, r); // second half
    }
}

int partition(int * A, int p, int r)
{
    int x = A[r]; // x = key AKA pivot
    int i = p - 1;

    for(int j = p; j <= r-1; j++)
    {
        if(A[j] <= x)
        {
            i = i + 1;
            A[i+1] = A[j];
        }
    }
    A[i+1] = x;
    return i + 1;
}

注意:Main() 如下图所示: 在下面随附的屏幕截图中,您在 WATCH 中看到我只能看到第一个值 10,但数组包含 {10, 5, 7, 1}

您不要在两行 partition 函数中交换值:

A[i+1] = A[j];

A[i+1] = x

您应该使用交换函数交换值:

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

然后在您的代码中:

swap(&A[i], &A[j]); // A[i] not A[i+1] as you did in your code.
swap(&A[i+1], &A[r]);

quickSort函数中,你应该改为:

quickSort(A, p, q-1); // first half
quickSort(A, q + 1, r); // second half

最后调用quickSort函数时,应该是:

quickSort(arr, 0, 3);

因为4不在数组中

完整代码:

#include <stdio.h>
void quickSort(int * A, int p, int r);
int partition(int * A, int p, int r);
void swap(int* a, int* b) 
{ 
    int t = *a; 
    *a = *b; 
    *b = t; 
} 

void quickSort(int * A, int p, int r)
{
    if(p < r)
    {
        int q = partition(A, p, r);
        quickSort(A, p, q-1); // first half
        quickSort(A, q + 1, r); // second half
    }
}

int partition(int * A, int p, int r)
{
    int x = A[r]; // x = key AKA pivot
    int i = p - 1;

    for(int j = p; j <= r-1; j++)
    {
        if(A[j] <= x)
        {
            i = i + 1;
           swap(&A[i], &A[j]);
        }
    }
    swap(&A[i+1], &A[r]);
    return i + 1;
}

int main () {
    int arr[4] = {10, 5, 7, 1};

    quickSort(arr, 0, 3);
    for(int i = 0; i < 4; i++) {
        printf("%d\n", arr[i]);
    }
}

测试输出:

1                                                                                                                       
5                                                                                                                       
7                                                                                                                       
10