Tag: 函数

数组作为函数的参数

有一系列结构。 static field fields[xsize][ysize]; 我想在function上改变它 void MoveLeft(pacman *Pacman, field **fields,int **play) 但是,当我这样发送它 MoveLeft(&Pacman,fields,play); 我有一个错误。 场 – 结构 typedef struct { blossom blossoms; wall walls; }field; 开花和墙壁 – 另一个结构

c函数参数评估顺序

我理解不能保证函数的参数将被调用的顺序,但是,如果有一个函数调用作为参数,是不是保证会首先调用该函数? 我帮助学生在实验室进行编程的入门课程,他们应该创建一个递归因子函数,它接收n(对于n!)和一个指向整数的指针,该整数将用于计算函数调用,然后它们是应该打印结果(n,n!和count)。 许多人抱怨他们使用指针是错误的,所以我查看了代码,他们都是这样的: int fat(int n,int *count) { (*count)++; if(n>1) { return n * fat(n-1,count); } return 1; } int main() { int n, count=0; do { printf(“Write n for fat (n >= 0): “); scanf(“%d”, &n); }while(n<0); printf("Input: %d. Output: %d.\nFunction called %d times.\n\n", n, fat(n, &count), count); printf("%d times\n",count); return 0; } 用gcc编译(Debian […]

在函数调用的参数内定义新函数,数组,结构等

如果你有一个function,采取以下措施: void foo(char **arr); 你怎么能做到以下几点: void foo(char* x[] = { “hello”, “my”, “friend” }); 如果这让您感到困惑,那么在Java中我们通过以下方式做到这一点: public void foo(String[] x); foo(new String[] { “hello”, “my”, “friend” }); 目前,我在C中做了以下我讨厌,因为它看起来很丑: char* myArr[] = { “hello”, “my”, “friend” }; foo(myArr);

需要改变不同结构中的常见字段

对于Windows和各种Unix平台,我在这里用C编程。 我有一组具有共同字段的结构,但也有不同的字段。 例如: typedef struct { char street[10]; char city[10]; char lat[10]; char long[10]; } ADDR_A; typedef struct { char street[10]; char city[10]; char zip[10]; char country[10]; } ADDR_B; 它们显然不是那么简单,我实际上有6种不同的结构,但这是基本的想法。 我想要的是一个函数,我可以将指针传递给其中一个并能够更新公共字段。 就像是: static void updateFields( void *myStruct ) { strcpy( myStruct->street, streetFromSomethingElse ); strcpy( myStruct->city, cityFromSomethingElse ); } 显而易见,我在那里写的东西不起作用,因为void指针和某种类型的强制转换是有序的,但是没有一个很好的方法来强制转换(是吗?)。 我并不反对以某种方式指定结构类型的附加参数。 由于不相关的原因,我不能更改这些结构或将它们组合或用它们做任何其他事情。 我必须按原样使用它们。 一如既往,感谢您的帮助。 编辑:正如我在下面的评论中添加的那样,公共字段不保证全部在开头或全部在结尾或其他任何内容。 他们只是保证存在。

将多维数组传递给C中的函数

我有这样的function: void myfunc(int** arr, int n) { int i, j; for(i=0; i<n; ++i) { for(j=0; j<n; ++j) { printf("%d,", *(arr + i*n + j) ); // Print numbers with commas } printf("\n"); // Just breakline } } 在其他函数中,我有一个像这样的二维数组: int main() { int seqs[8][8] = { {0, 32, 36, 52, 48, 16, 20, 4}, {0, 16, […]

C中的空函数指针是什么意思?

假设我们有一个函数指针: void (*func0)(void); 这也定义了: void func0(void) { printf( “0\n” ); } 但是说,在某些时候我们尝试以某种方式访问​​函数指针,然后如果MS VS调试器在我进入代码时显示func0实际指向0x0000,这是什么意思? 另外,还请告诉我什么是最好的解决方案? 谢谢。

sizeof()如何通过引用参数传递

我传递了一个数组来运行,并试图找到数组的长度。 但结果没有预料到。 有人可以解释一下吗? int main() { int array[10]={0}; func(array); return 0; } void func(int arr[]) { printf(“length of an array is %d “,(sizeof(arr)/sizeof(arr[0])); } 它给出了答案2.当我在main函数中尝试相同的操作时,它工作正常(答案是10)。 //在linux中使用gcc编译器

通过将指针传递给c中的函数来创建2D数组

所以我读了几十个将2D数组指针传递给函数的例子,以便在函数中获取/更改该数组的值。 但是有可能在函数内部创建(分配内存)。 像这样的东西: #include void createArr(int** arrPtr, int x, int y); int main() { int x, y; //Dimension int i, j; //Loop indexes int** arr; //2D array pointer arr = NULL; x=3; y=4; createArr(arr, x, y); for (i = 0; i < x; ++i) { for (j = 0; j < y; ++j) { printf("%d\n", […]

返回函数c中的结构

我正在尝试从函数返回一个struct 。 看起来像这样.. struct read(struct returnera returnDuo, struct vara varuArray[]) { char varunr[LISTNUMBER], varunamn[LISTNUMBER]; FILE *varuLista; varuLista = fopen(returnDuo.filnamn, “r”); if(varuLista!=NULL) { while(fscanf(varuLista,”%s\t%s\t%d\n”,varunr, varunamn, &varuArray[returnDuo.antalVaror].lagerSaldo) == 3){ strncpy(varuArray[returnDuo.antalVaror].varuNr,varunr,5); strncpy(varuArray[returnDuo.antalVaror].varuNamn,varunamn,30); returnDuo.antalVaror++; } printf(“Filen är laddad..\n”); kommaVidare(); } else { printf(“Filen hittades inte, skapar en tom fil”); kommaVidare(); } fclose(varuLista); return returnDuo; } 我正在尝试返回returnDuo结构中的内容,但是我收到错误消息:“预期标识符或’(’”。如果我使用void函数,它按预期工作而不返回任何内容,但我无法弄清楚如何返回此struct 。 这就是我设置结构的方法。 struct […]

使用stat()函数测试DIRENT是目录还是文件的正确方法是什么?

我在使用’if(S_IFDIR(stbuf.st_mode))’行时遇到了一些麻烦。 这是测试目录递归的正确方法吗? 此时的函数似乎正确地执行1或2个循环,然后失败并且分段错误。 我尝试过以下内容,可能更多的是条件。 S_ISDIR(st_mode) ((st_mode & ST_IFMT) == S_IFDIR) S_IFDIR(stbuf.st_mode) 我已经包含了整个function,因为我担心问题可能在其他地方。 void getFolderContents(char *source, int temp){ struct stat stbuf; int isDir; dirPnt = opendir(source); if(dirPnt != NULL){ while(entry = readdir(dirPnt)){ char *c = entry->d_name; if(strcmp(entry->d_name, cwd) == 0 || strcmp(entry->d_name, parent) == 0){ } else{ stat(entry->d_name, &stbuf); printf(“%i %i “, S_IFMT, stbuf.st_mode); if(S_IFDIR(stbuf.st_mode)){ //Test […]