Tag: 参数

特定函数与许多参数与上下文相关

一个例子 假设我们有一个要写的文本,可以转换为“大写或小写”,并可以“​​左,中,右”打印。 具体案例实现(function太多) writeInUpperCaseAndCentered(char *str){//..} writeInLowerCaseAndCentered(char *str){//..} writeInUpperCaseAndLeft(char *str){//..} and so on… VS 许多Argument函数(糟糕的可读性,甚至在没有很好的自动完成IDE的情况下很难编写代码) write( char *str , int toUpper, int centered ){//..} VS 依赖于上下文(难以重用,难以编码,使用丑陋的全局变量,有时甚至无法“检测”上下文) writeComplex (char *str) { // analize str and perhaps some global variables and // (under who knows what rules) put it center/left/right and upper/lowercase } 也许还有其他选择..(并且欢迎) 问题是: 这个(经常性的)三难问题是否有任何良好的实践或经验/学术建议 ? 编辑: […]

如何在c / c ++中使用指针传递struct数组?

在C代码中,我坚持将一个struct数组传递给一个函数,这里的代码类似于我的问题: typedef结构 { int x; int y; char * str1; char * str2; } Struct1; void processFromStruct1(Struct1 * content []); int main() { Struct1 mydata [] = {{1,1,“black”,“cat”}, {4,5, “红”, “鸟”}, {6,7, “褐色”, “狐狸”}, }; processFromStruct1(MYDATA); //!怎么样? 找不到正确的语法 返回0; } void processFromStruct1(Struct1 * content []) { printf(“%s”,content [1] – > str1); //如果我想打印’red’,这是对的吗? … } msvc中的编译错误是这样的: […]

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

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

在函数名称后声明函数参数

int func(x) int x; { …………. 这种宣言叫什么? 它何时有效/无效,包括C或C ++,某些标准修订和编译器?

C将int数组指针作为参数传递给函数

我想将B int数组指针传递给func函数,并能够从那里更改它,然后查看main函数中的更改 #include int func(int *B[10]){ } int main(void){ int *B[10]; func(&B); return 0; } 上面的代码给了我一些错误: In function ‘main’:| warning: passing argument 1 of ‘func’ from incompatible pointer type [enabled by default]| note: expected ‘int **’ but argument is of type ‘int * (*)[10]’| 编辑:新代码: #include int func(int *B){ *B[0] = 5; } int main(void){ […]

printf如何处理其参数?

printf如何处理其参数? 我知道在C#中我可以使用params关键字来做类似的事情,但我无法在C中完成它?

volatile变量作为函数的参数

有这个代码: typedef volatile int COUNT; COUNT functionOne( COUNT *number ); int functionTwo( int *number ); 我无法摆脱一些警告.. 我在functionOne原型上得到了这个警告1 函数返回类型时忽略[警告]类型限定符 我得到这个警告2,无论我用一个COUNT 指针参数而不是一个int指针调用functionTwo [警告]从指针目标类型中抛弃限定符 显然变量/指针不能“强制转换”为volatile / un-volatile ..但是每个参数都必须指定为volatile吗? 那么如果已经为非易失性变量定义了库函数怎么用呢? 编辑 :使用gcc -std=c99 -pedantic -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wextra -Wstrict-prototypes -Wmissing-prototypes … 编辑 :在Jukka Suomela建议之后,这是警告二的代码示例 typedef volatile int COUNT; static int functionTwo(int *number) { return *number + 1; } […]

将一个字符串数组作为参数传递给C中的函数

我想要一个简单的函数,它接收一个字符串并在一些解析后返回一个字符串数组。 所以,这是我的function签名: int parse(const char *foo, char **sep_foo, int *sep_foo_qty) { int i; char *token; … strcpy(sep_foo[i], token); /* sf here */ … } 然后我称之为: char sep_foo[MAX_QTY][MAX_STRING_LENGTH]; char foo[MAX_STRING_LENGTH]; int sep_foo_qty, error; … error = parse(foo, sep_foo, &sep_foo_qyt); … 这样我在编译时会收到警告: warning: passing argument 2 of ‘parse’ from incompatible pointer type 然后在标记为/ * sf的行中执行期间出现分段错误* / 我的C代码有什么问题? […]

void指针作为参数

以下C片段: […] void f1(void* a){ printf(“f(a) address = %p \n”,a); a = (void*)(int*)malloc(sizeof(int)); printf(“a address = %p \n”,a); *(int*)a = 3; printf(“data = %d\n”,*(int*)a); } void f(void){ void* a1=NULL; printf(“a1 address = %p \n”,a1); f1(a1); printf(“a1 address = %p \n”,a1); printf(“Data.a1 = %d\n”,*(int*)a1); } […] 结果是 a1 address = (nil) f(a) address = (nil) a […]

C参数数组声明符

在C99中有变长数组,参数数组声明符中可以有静态限定符(和类型限定符): void f(int i, int *a); void f(int i, int a[]); void f(int i, int a[i]); void f(int i, int a[*]); // Only allowed in function prototypes. void f(int i, int a[static i]); 由于数组函数参数只是衰减到指针,以前的声明之间是否有任何实际差异,还是风格问题? 什么时候应该使用它们? 特别是, static限定符意味着什么? 该标准没有清楚地说明每种语法的原因。