Tag: 函数

在C中初始化函数指针

我有这个function uint8_t Authorization_getRole (char const* userId, UsertoRole_T const *roleTable) 在主程序中我有: given_Role = Authorization_getRole (userId, roleTable) 我想用函数指针替换函数调用: uint8_t (*getRole_ptr)() given_Role = &getRole_ptr; 我的问题是: 我在哪里初始化函数指针getRole_ptr? 如何初始化函数指针? 下面的语法是否正确? getRole_ptr = Authorization_getRole (userId, roleTable)

将一阶转移函数转换为c代码

我有一个简单的一阶转移,如“3 / s + 3”或“tf(3,[1 3])”函数,我想用c代码实现。 我有一个C函数,自上次迭代后调用delta时间: double output(double input, double t); //usually, t is around 0.01 second 如何在C中实现传递函数3 / s + 3?

c中具有不同类型参数的可变函数

我想知道在C中是否可以创建一个带有不同类型参数的可变参数函数。 即 void fillDatabase(char* name, int age){ writeToDatabase(name, age); } int main(){ fillDatabase(“Paul”, 19); fillDatabase(“Herbert”); } 在这里,我试图填写一个名称和年龄的数据库。 但也可以用一个名字填充它,而不是年龄。 所以我想知道我是否可以使用相同的function,或者我是否必须写两个不同的function? 在线我只能找到具有相同类型参数的可变函数的示例。 提前致谢!

函数指针:为什么(* fptr)(6,7)与(fptr)(6,7)相同,如果函数是add(int,int)

在function pointers , 如果函数指针被赋值为添加函数(*fptr)(int a, int b)为什么(*fptr)(int a, int b)与(fptr)(int a, int b)相同? int (*fptr)(int ,int) = add; while add(int a , int b) returns sum of two numbers.

限制结构中的关键字和指针

通过使用restrict关键字,如下所示: int f(int* restrict a, int* restrict b); 我可以指示编译器数组a和b不重叠。 说我有一个结构: struct s{ (…) int* ip; }; 并编写一个带有两个struct s对象的函数: int f2(struct sa, struct sb); 在这种情况下,我怎样才能类似地指示编译器a.ip和b.ip不重叠?

从“char”到“char *”的转换无效

这是将罗马数字(例如VI)转换为小数的程序。 该算法正在编写一个函数,该函数识别输入字符串的每个元素并返回十进制的相应值。 我们得到char Roman_num[20]对于每个元素, sum+=value(Roman_num[i]) 。函数原型是int value (char digit)它导致’ 从char转换为char *的无效转换’错误。 但是,当将每个元素的地址&a[i]传递给函数并将原型更改为int value (char *digit) ,它不会重复此错误,但会导致此switch-case中的另一个错误(在函数内部): switch (*digit)给出‘digit’错误不能出现在constant-expression中 我的问题是我不清楚:在这个例子中,我们是否必须只将地址传递给函数? 如果我们想传递值,单个字符值,那么如何? 最后但并非最不重要的是,*数字实际上是一个单个字符,那么为什么它不能出现在case()中的常量表达式中? 我将非常感谢你的帮助。 另一方面,你可以向我推荐一些书籍,以便深入了解C语言吗? 我现在正在使用C:How To Program book,我几乎不知道变量,函数如何在内部工作以便更深入地理解。 这是代码: int value (char *digit); int main (void) { char a[100]; int length,i,sum=0; printf(“Enter your Roman number: “); fflush(stdin); gets(a); printf(“\nThe Roman number that you have entered is […]

使用递归反转字符串

我从互联网上得到这个代码,但我无法得到整个代码。 例如if(*str) 。 这段代码是什么意思? 还可以返回一个字符串吗? 我认为main中的数组可以直接在函数中更改,但这里已经返回了.. #include #define MAX 100 char* getReverse(char[]); int main(){ char str[MAX],*rev; printf(“Enter any string: “); scanf(“%s”,str); rev = getReverse(str); printf(“Reversed string is: %s\n\n”,rev); return 0; } char* getReverse(char str[]){ static int i=0; static char rev[MAX]; if(*str){ getReverse(str+1); rev[i++] = *str; } return rev; }

在隐式函数声明的情况下的默认参数提升

我试图搜索旧问题,但我没有解决我的问题。 我试着解释我的怀疑; 假设在c89模式下工作,如果在函数调用之前没有函数的原型,则存在函数的隐式声明,函数的类型为int ,参数通过Default Argument Promotions转换: char或short int类型的对象(无论是否有符号)被提升为int或unsigned int,视情况而定; 并且float类型的对象被提升为double类型。 所以,如果我写这样的代码,我同意它必须工作: int main(void){ char a; short b,c; f(a,b,c); return 0; } int f(int a,int b,int c){ return 1; } 和这里一样: int main(void){ float a; short b,c; f(a,b,c); return 0; } int f(double a,int b,int c){ return 1; } 但我不明白为什么以下2个案例有效 /*a)*/ int main(void){ short a,b; float […]

下标值既不是数组也不是指针函数错误

处理一个程序,该程序将从几个文件中读取数据,将其扫描到数组中,最终在屏幕上打印13个名称,每个名称旁边有4个数字,并在一个分级图表中输入这些数字后的字母。 但是我遇到的问题是我正在使用的其中一个函数,其目的是计算平均值。 它将一个学生测试的所有分数组合成一个值,然后将其除以4以找到平均值,然后将该平均值存储到不同数组的一个元素中。 函数调用是: avg(&scores, &average); 分数和平均值定义如下: int scores[13][4]; float average[13]; 并使用此循环填充了分数: for(i=0; i<=13; i++) { for(j=0; j<=4; j++) { fscanf(score, "%d", &scores[i][j]); } } fclose(score); 作为参考,使用的文件打开语句是: FILE *student, *score; score = fopen(“scores.dat”, “r”); 该函数本身如下所示: void avg(int *scores, float *average) { int total1 = scores[0][0] + scores[0][1] + scores[0][2] + scores[0][3]; int total2 = scores[1][0] […]

将2D数组传递给C中的函数

基本上,我有一个数据矩阵(比如说int),我想存储在一个二维数组中,直到运行时才知道维度(比如x列和y行)。 我想在函数中填充数组,所以我假设我需要做这样的事情: int main(int argc, char **argv) { int y = atoi(argv[1]); int x = atoi(argv[2]); int **matrix = malloc(x * sizeof(int*)); populateMatrix(matrix, y, x); return 0; } void populateMatrix(**matrix, int y, int x) { int i, j; for (i = 0; i < y; i++) { for (j = 0; j < x; j++) […]