Tag: 函数

C指针表示法与数组表示法相比:传递给函数时

我的问题基于以下代码: int myfunct(int ary[], int arysize) int myfunct2(int *ary, int arysize) int main(void){ int numary[10]; myfunct(numary, 10) myfunct2(numary, 10) return; } int myfunct(int ary[], int arysize) { //Whatever work is done } int myfunct2(int *ary, int arysize) { // Whatever work is done } 是否有理由使用其中一个而不是另一个? 详细说明,当涉及数值数组时,有任何理由想要在数组表示法上使用指针表示法。 如果使用指针表示法,那么在函数指针算术中将使用等等。如果使用[]数组表示法,则可以像往常一样使用数组。 我是编程新手,我目前看不到使用指针表示法有什么好处。 我的确切问题是,有没有理由使用指针表示法将数值数组传递给函数,因此在函数中使用指针操作。

如何从函数中返回矩阵(2D数组)? (C)

我创建了一个生成宾果板的function,我想要返回宾果板。 正如我没想到的那样,它不起作用。 这是function: int** generateBoard() { int board[N][M], i, j , fillNum; Boolean exists = True; // initilize seed srand(time(NULL)); // fill up.. for(i = 0; i < N; ++i) { for(j = 0; j < M; ++j) { exists = True; while(exists) { fillNum = rand()%MAX_RANGE + 1; // limit up to MAX_RANGE if(beenAdded(board, […]

为什么getline的第一个参数指向指针“char **”而不是“char *”?

我使用getline函数从STDIN读取一行。 getline的原型是: ssize_t getline(char **lineptr, size_t *n, FILE *stream); 我将此作为测试程序使用,该程序来自http://www.crasseux.com/books/ctutorial/getline.html#getline #include #include #include int main(int atgc, char *argv[]) { int bytes_read = 1; int nbytes = 10; char *my_string; my_string = (char *)malloc(nbytes+1); puts(“Please enter a line of text”); bytes_read = getline(&my_string, &nbytes, stdin); if (bytes_read == -1) { puts (“ERROR!”); } else { puts […]

在C中,作为参数传递时,`&function`和`function`有什么区别?

例如: #include typedef void (* proto_1)(); typedef void proto_2(); void my_function(int j){ printf(“hello from function. I got %d.\n”,j); } void call_arg_1(proto_1 arg){ arg(5); } void call_arg_2(proto_2 arg){ arg(5); } void main(){ call_arg_1(&my_function); call_arg_1(my_function); call_arg_2(&my_function); call_arg_2(my_function); } 运行这个我得到以下内容: > tcc -run try.c hello from function. I got 5. hello from function. I got 5. hello from […]

为什么有些function非常长? (学术研究需要的想法!)

我正在写一个关于极长function的小型学术研究项目。 显然,我不是在寻找错误编程的例子,而是寻找100,200和600行长函数的例子。 我将使用在希伯来大学编写的硕士学位编写的脚本来调查Linux内核源代码,该脚本测量不同的参数,如代码行数, 函数复杂度 (由MCC测量)和其他好东西。 顺便说一下,这是一个关于代码分析和推荐阅读材料的简洁研究。 我很感兴趣,如果你能想出为什么任何函数应该特别长的任何理由? 我将研究C,但任何语言的例子和论据都会有很大用处。

C中的通用列表操作函数?

什么是C中的通用列表操作函数? (当我浏览一些材料时,我看到了这一点。) 这个函数和一个可以接受任何元素的函数有什么区别? 它们是一样的吗? 如果它们不相同,我们如何单独实施?

C:通过堆栈/寄存器问题返回值

我是C的新手,有一点我无法理解。 当函数返回不大于寄存器的东西时 – 我的编译器将它放在EAX中。 当我返回大结构(不是指针而是结构本身)时 – 它通过堆栈返回。 我的问题是:编译器如何知道如何调用另一个对象导出的函数? 有一个调用约定(比如stdcall)但它是关于传递参数,而不是读取返回的值,对吗? 应该有一些规则,如“如果声明的返回值大于EAX,则从[bp -…]”获取。 还有一个:是否正确地说我想要返回的对象,比寄存器大,应该存储在堆中并由指针返回以防止所有堆栈操作? 谢谢。

你会如何设计一个完美哈希的函数?

感兴趣的领域是字符串匹配。 假设我有这样的结构。 typedef struct { char *name, int (*function)(); } StringArray StringArray s[] = { {“George”, func1}, {“Paul”, func2}, {“Ringo”, func3}, {“John”, func4}, {“”, NULL} /* End of list */ } 数组中有固定数量的字符串。 它们是硬编码的,如示例中所示。 如果表发生变化,则需要重新评估散列函数的质量。 我想将哈希函数应用于字符串,如果字符串与数组中的字符串匹配,则调用该函数。 这需要一个完美的哈希函数。 不允许冲突。要求散列的目的是在查找上获得O(1)性能。 您在设计function时有什么想法?

从C中的函数返回枚举?

如果我在头文件中有类似下面的内容,我如何声明一个返回类型为Foo的枚举的函数? enum Foo { BAR, BAZ }; 我可以做以下的事情吗? Foo testFunc() { return Foo.BAR; } 或者我需要使用typedef或指针或什么?

传递函数指针

关于如何将指针传递给指针函数,我有点困惑。 我有一个函数,它指向一个我理解没有问题的函数(ExecBlock)。 但是我给了另一个函数原型(ExecBlock2),它接受了解引用指针(我不确定它到底是什么),如果传递函数有任何参数,也会接受参数。 如果有人可以解释优先级以及解释指针函数究竟会做什么。 这不仅仅是传递函数本身吗? 在这种情况下(void *)做什么? int ExecBlock (void (*f) (void), int isSet) { return ExecBlock2( HOW TO PASS HERE? , NULL, isSet); } int ExecBlock2(void *(*f)(void *), void *arg, int isSet) { … more code } 谢谢!