Tag: 函数

我如何在函数内malloc结构数组? 代码另有工作

我正在尝试创建一个创建可变大小的2D funct数组的函数。 我正在使用以下代码,它似乎可以自行工作: typedef struct { //Starter Properties int TypeB; int TypeF; int TypeW; //Randomized Properties int RandB; int RandF; int RandW; //Derived Properties int Speed; } MapTileData; MapTileData **Map; int i, x=5, y=5; //Allocate Initial Space Map = (MapTileData**)calloc(x, sizeof(MapTileData)); for(i = 0; i < x; i++) { Map[i] = (MapTileData*)calloc(y, sizeof(MapTileData)); } 所以上面的代码创建了一个2D结构数组。 […]

在函数中交换两个数组的指针

我正在编写一个没有复制部分的mergesort到一个额外的临时数组。 出于这个原因,我创建了一个辅助arraysaux int * aux aux = (int *) calloc(n, sizeof(int)); 其中n是数组的大小。 在函数合并中,我想通过使用指针继续我的算法来在最后交换两个数组。 但是,如果我交换指针,并将它们打印到控制台,我得到了奇怪的东西: 在方法本身内,指针被交换。 但是,如果我检查我的方法,回到我的主,指针不再交换。 调用我的合并方法: merge(a, lo, mid, hi, aux); 其中a是我的主arrays,辅助和lo , mid和hi是整数。 原型: void merge(int *a, int lo, int mid, int hi, int *aux); 我试图像这样交换它们: int temp; temp = a; a = aux; aux = temp; 你能帮我解决这个问题吗? 提前致谢!

在C中传递和更改函数内部的数组

我有这个简单的C程序,它将函数中的任何数组元素更改为2。 虽然它有效但令我困惑的是,我不应该将数组地址传递给函数,而不是数组本身? 它不是那样工作的…… void function(int *val, int element){ *(val+element) = 2; } int main(int argc, char *argv[]) { int value[2]; value[0] = 10; value[1] = 5; int element = 0; function(value, element); return 0; }

gcc中的运行时参数(反向va_args / varargs)

我正在尝试对我正在研究的微控制器的解释器进行一些改进。 为了执行内置函数,我目前有这样的东西(虽然有点快): function executeBuiltin(functionName, functionArgs) { if (functionName==”foo”) foo(getIntFromArg(functionArgs[0])); if (functionName==”bar”) bar(getIntFromArg(functionArgs[0]),getBoolFromArg(functionArgs[1]),getFloatFromArg(functionArgs[2])); if (functionName==”baz”) baz(); … } 但它适用于资源非常有限的嵌入式设备(ARM),我需要大幅减少代码大小。 我想做的是有一个通用函数来调用具有不同参数的其他函数 – 如下所示: function executeBuiltin(functionName, functionArgs) { functionData = fast_lookup(functionName); call_with_args(functionData.functionPointer, functionData.functionArgumentTypes, functionArgs); } 所以我希望能够调用标准的C函数并将其传递给它所需的任何参数(可能都是不同的类型)。 为此,我需要一个call_with_args函数。 我想避免重写每个函数来采取argc + argv。 理想情况下,每个被调用的函数都是完全标准的C函数。 这里有一个关于这个问题的讨论 – 但自1993年撰写该帖以来,有什么变化吗? 特别是当我在ARM上运行时,参数位于寄存器而不是堆栈中。 即使它不在标准C中,是否有任何GCC具体可以完成? 更新:看起来尽管根据规范行为是“未定义的”,看起来因为C调用的方式工作,你可以传递更多的参数到一个函数而不是它期望的一切都很好,所以你可以解压缩所有将参数放入uint32s数组中,然后可以将每个uint32传递给该函数。 这使得为​​调用编写“漂亮”代码变得更加容易,并且它似乎运行得很好(在32位平台上)。 唯一的问题似乎是传递64位数字并编译为64位x86,因为在这种情况下它似乎做了一些特别奇怪的事情。

在C中反转字符串不会输出反转的行

我正在尝试反转C中的字符串。反向函数只是将给定位置(在for循环中)的字符分配给临时对象。 我在程序中看不到任何逻辑错误,并且使用以下命令在gcc 4.7.2下成功编译程序: gcc -Wall -std=c99 reverse.c 要重新创建问题: 1.)运行程序并在shell中输入一个字符串 2.)完成输入后,按enter /和/或您的EOF信号。 问题是既没有打印原始字符串,也没有反转字符串。 这也是K&R第二版的练习,如果你完成了这个练习,我将不胜感激我的另一个解决方案。 我认为该错误是由缺少空字符引起的,着名的printf需要一个以空字符结尾的字符串来打印输入到cin。 getline函数将一个空字符分配给数组的末尾,当然空字符将是字符串中结束printf的第一个字符(因此不会打印字符/文字)。 #include #define MAXLINE 1000 int geline(char s[], int lim); void reverse(char line[], int length); int main() { char s[MAXLINE]; char t[MAXLINE]; int k, len; while ((len = getline(s, MAXLINE)) > 0) { if (len > 1) reverse(s, len); } printf(“%s”, […]

我如何摆脱__x86.get_pc_thunk.ax的召唤

我试图编译并将一个非常简单的C程序转换为汇编语言。 我使用的是Ubuntu,操作系统类型是64位。 这是C程序。 void add(); int main() { add(); return 0; } 如果我使用gcc -S -m32 -fno-asynchronous-unwind-tables -o simple.S simple.c这就是我的汇编源代码文件应该是这样的: .file “main1.c” .text .globl main .type main, @function main: pushl %ebp movl %esp, %ebp andl $-16, %esp call add movl $0, %eax movl %ebp, %esp popl %ebp ret .size main, .-main .ident “GCC: (Debian 4.4.5-8) 4.4.5” […]

C函数参数可以设置变量吗?

我无法弄清楚如何在下面的C代码中设置firstname和lastname变量。 printf(“Hello, %s, %s\n”, firstname, lastname); 它看起来readln函数的char [s]参数是设置firstname和lastname。 这是可能的,如果是这样的话,我可以做一些研究。 谢谢 编辑:下面是一个更简单的版本。 看起来参数是设置变量。 int foo(char s[]){ s[0]=’w’; s[1]=’\0′; return 5; } int main() { char name[2]; int wtf; wtf = foo(name); printf(“%s\n”, name); } 参数char s []是设置名称 #include #define STRLEN 5 int readln(char s[], int maxlen) { char ch; int i; int chars_remain; i = 0; […]

什么时候可以使用“void()”,这样做有什么好处

我最近开始学习C语言,并且已经注意到函数“void()”,但是,我想知道它的作用,它是最好的应用点,也许是void的替代品,可能更有效率。 谢谢。

反转用户输入的数字

我试图反转用户输入的数字(即用户输入的数字存储在数组中,只要他输入正数)。 但是,当我输入123 4569 752 896 -1时,输出为321 9653 257 698正如您所看到的,第二个数字不是9654.我无法修复它。 #include #include // finding the number of digits int bsm(int a){ int i=0; while(a!=0){ i++; a=a/10; } return i; } // reversing the number int rev(int m,int a){ int s=0,sum=0; while(a!=0){ s=a%10; sum+=s*pow(10,m)/10; m–; a=a/10; } return sum; } int main() { int i=0,k,a[10],p,r; scanf(“%d”,&a[i]); while(a[i]>0){ […]

无法理解如何从C中的函数返回字符串

void add() { char name[50], surname[50], usern[50]; int id, birth, amount; printf(“Enter your name, surname and your year of birth:\n”); scanf(“%s %s %d”, &name, &surname, &birth); printf(“Enter your ID, username and your total amount:\n”); scanf(“%d %s %d”, &id, &usern, &amount); const char *pass1=function(usern); } const char *function (char usern[50]) { char temp; int i=0; int […]