在 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
我正在 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