小编lgr*_*enl的帖子

qsort在c中动态创建数组

嘿伙计们(预先警告这个问题让我觉得n00b所以我可能是),

我能够动态创建一个数组,并且我能够有效地将qsort用于静态创建的数组,但是在动态创建的数组上使用qsort时遇到了麻烦.我想我对使用指针感到磕磕绊绊.

struct my_struct {
    FILE *fp;
    int i;
};
Run Code Online (Sandbox Code Playgroud)

所以数组包含上面的结构,我想用int值对它进行排序.

静态地说,我可以这样做:

struct my_struct array[4];
Run Code Online (Sandbox Code Playgroud)

排序:

qsort((void *) &array, sizeof(array) / sizeof(struct my_struct), sizeof(struct my_struct), *compare);
Run Code Online (Sandbox Code Playgroud)

-

如果我这样创建数组:

struct my_struct* = malloc(sizeof(struct process) * 4);
Run Code Online (Sandbox Code Playgroud)

一切都编译并运行,但执行永远不会进入比较功能.

任何帮助将不胜感激

c struct qsort

2
推荐指数
1
解决办法
1967
查看次数

使用指针的意外结果

首先,如果你以前见过这个,请道歉.我努力尝试在这里和其他地方找到答案.

我是C的新手,仍然专注于指针和有效使用它们.

代码(为简洁起见编辑):

void getInFile(char fileName[], FILE *inFile) {
    inFile = fopen(fileName, "r");
    if(inFile == NULL) {
        printf("Error1");
    }
}

void function(FILE *inFile) {
    if(inFile == NULL) {
        printf("Error2");
    }
}

int main(int argc, char *argv[]) {
    FILE *inFile = 0;
    getInFile(argv[2], inFile);
    function(inFile);
}
Run Code Online (Sandbox Code Playgroud)

如上所述,运行程序会产生错误2.如果我将getInFile从void更改为FILE*返回类型并且在main方法中有以下内容我得到error1:

inFile = getInFile(argv[2], inFile);
Run Code Online (Sandbox Code Playgroud)

这是我使用指针不正确的一个例子还是我做错了什么?

c pointers pass-by-reference

0
推荐指数
1
解决办法
118
查看次数

标签 统计

c ×2

pass-by-reference ×1

pointers ×1

qsort ×1

struct ×1