传入指向函数的指针时如何从数组中获取值?

时间:2018-02-08 17:37:30

标签: c sorting pointers

我正在尝试创建一个实现梳理排序的函数,但是我的代码实际上正在读取我想要输入的数组。

void comb_sort(int* numbers, int size)
{
int gap = size;
float shrink = 1.3;
int sorted = 0;

do
{

    gap = gap/shrink;
    if (gap > 1)
        sorted = 0;
    else
    {
        gap = 1;
        sorted = 1;
    }

    int i = 0;
    do
    {
        if (numbers+i > numbers+(i+gap))
        {
            swap(numbers+i,numbers+(i+gap));
            sorted = 0;
        }
        i++;
    }while(i+gap < size);


} while (sorted == 0);
}

numbers参数是我的main函数中的一个数组,但是因为我想改变传入指针的值。但是,包含它的if语句实际上似乎没有传递给它的数组值。当使用gdb测试它时,它只有1个存储在其中,即使我验证该数组具有来自其内部的文本文件的所有值。有迹象表明我错了吗?

编辑*这里是我的主要功能的代码。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sorting.h"

int main(int argc, char* argv[]){

FILE *list;
list = fopen(argv[1],"r");
int data_size = 0;
int num;

while (fscanf(list,"%d ",&num) == 1){
    data_size++;
}
fseek(list,0,SEEK_SET);
int num_array[data_size];
int j;
for (j=0;j<data_size;j++){
   fscanf(list,"%d ",num_array+j);
}

if (strcmp("comb", argv[2]) == 0)
    comb_sort(num_array,data_size);

1 个答案:

答案 0 :(得分:2)

numbers+i是一个不是值的地址。它应该是*(numbers+i)甚至是numbers[i]

if语句条件中,您要比较两个地址而不是您想要的值。