gpt4 book ai didi

c - c 中的指针更改 static int 值

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:13:50 26 4
gpt4 key购买 nike

我尝试使用指针在 C 中编写合并排序算法(我是指针的新手)。我使用了 static int n(n = 元素数)和 v(元素数组)。 mergeSort算法后,每次用随机数修改n值。我做错了什么?

这里我读取了输入

int *v = malloc(NMAX * sizeof(int));
int n;
scanf("%d", &n);

int i;
for (i = 0; i < n; ++i) {
scanf("%d", &v[i]);
}

这是合并排序算法:

void mergeSort(int st, int dr, int *v) {
if (st < dr) {
int mij = (st + dr) / 2;
mergeSort(st, mij, &v);
mergeSort(mij + 1, dr, &v);
mergeElements(st, dr, &v);
}
}

void mergeElements(int st, int dr, int *v) {
int *auxArray = malloc((dr - st + 3) * sizeof(int));
int pos = 0;
int sPos = st;
int mij = (st + dr) / 2;
int dPos = mij + 1;

for (pos = 0; pos < (dr - st + 1); ++pos) {
if (dPos == dr + 1) {
auxArray[pos] = v[sPos];
sPos++;
} else if (sPos == mij + 1) {
auxArray[pos] = v[dPos];
dPos++;
} else {
if (v[sPos] < v[dPos]) {
auxArray[pos] = v[sPos];
sPos++;
} else {
auxArray[pos] = v[dPos];
dPos++;
}
}
}
int i;
for (i = 0; i < pos; ++i) {
v[st + i] = auxArray[i];
}
free(auxArray);
}

这是我出错的地方(在 main 中):

mergeSort(0, n - 1, &v);

printf("%d", n);

我得到的 n1998609340 而不是 6

编辑:这是我打印元素的地方:

for (i = 0; i < n; ++i) {
printf("%d ", v[i]);
}

最佳答案

&v 不应在您对 mergeSort 和 mergeElement 的调用中传递。&v 实际上是 int** 类型 而你的函数原型(prototype)支持 int *。(编译代码时一定有警告)

嘿,这是调试后的代码(只是在调用 mergeSort & mergeElements 时将 &v 改回 v)

#include<stdio.h>
#include<stdlib.h>
#define NMAX 1000
void mergeElements(int st, int dr, int *v);

void mergeSort(int st, int dr, int *v) {
if (st < dr) {
int mij = ( st + dr ) / 2;
mergeSort(st, mij, v);
mergeSort(mij + 1, dr, v);
mergeElements(st, dr, v);
}
}

void mergeElements(int st, int dr, int *v) {

int *auxArray = malloc( (dr - st + 3) * sizeof(int) );

int pos = 0;
int sPos = st;
int mij = ( st + dr ) / 2;
int dPos = mij + 1;

for (pos = 0; pos < (dr - st + 1); ++pos) {
if (dPos == dr + 1) {
auxArray[pos] = v[sPos];
sPos ++;
} else if (sPos == mij + 1) {
auxArray[pos] = v[dPos];
dPos ++;
} else {
if (v[sPos] < v[dPos] ) {
auxArray[pos] = v[sPos];
sPos ++;
} else {
auxArray[pos] = v[dPos];
dPos ++;
}
}
}
int i;
for (i = 0; i < pos; ++i) {
v[st + i] = auxArray[i];
}

free(auxArray);

}

int main()
{
int *v = malloc( NMAX * sizeof(int) );
int n;
scanf("%d", &n);
int i;
for (i = 0; i < n; ++i) {
scanf("%d", &v[i]);
}
mergeSort(0,n-1,v);
for(int i=0;i<n;i++)
{
printf("%d ",v[i]);
}
printf("\n");
}

关于c - c 中的指针更改 static int 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53024628/

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