C-将数组发送到函数而不声明它
是否可以在不首先声明/定义数组的情况下将其发送到C函数 这对于整数是可能的C-将数组发送到函数而不声明它,c,arrays,declaration,C,Arrays,Declaration,是否可以在不首先声明/定义数组的情况下将其发送到C函数 这对于整数是可能的 int add(int a, int b) { return (a + b); } void main(void) { int c; int a=1, b=2; /* With declaring (works fine)*/ c = add(a, b); /* Without declaring (works fine)*/ c = add(1, 2); }
int add(int a, int b) {
return (a + b);
}
void main(void) {
int c;
int a=1, b=2;
/* With declaring (works fine)*/
c = add(a, b);
/* Without declaring (works fine)*/
c = add(1, 2);
}
对于阵列,是否有类似的内容
#include <stdio.h>
void print_int_array(int *array, int len) {
int i;
for (i = 0; i < len; i++)
printf("%d -> %d\n", i, *array++);
}
void main(void) {
int array[] = {1, 1, 2, 3, 5};
/* With declaring (works just fine) */
print_int_array(array, 5);
/* Without declaring (fails to compile) */
print_int_array({1, 1, 2, 3, 5}, 5);
}
#包括
无效打印数组(int*数组,int len){
int i;
对于(i=0;i%d\n”,i,*array++);
}
真空总管(真空){
int数组[]={1,1,2,3,5};
/*与声明(工作刚刚好)*/
打印数组(数组,5);
/*未声明(编译失败)*/
打印int数组({1,1,2,3,5},5);
}
是的,这是可能的,因为c99具有复合文字:
print_int_array((int [5]) {1, 1, 2, 3, 5}, 5);
(){}
是复合文字运算符。复合文字提供了一种指定聚合或联合类型的未命名常量的机制。(非常量)复合文字是可修改的。是。你可以。在C99/11中,您可以使用:
C11:6.5.2.5复合文字:
一种后缀表达式,由括号中的类型名和括号组成
初始值设定项列表是一个复合文本。它提供了一个未命名的对象,其值由初始值设定项列表给出。99)
99)请注意,这与强制转换表达式不同。例如,强制转换指定到标量类型的转换
或者只使用
void
,强制转换表达式的结果不是左值。我选择了这个,因为省去了大小声明,以后更容易编辑。除了重复的问题外,第1个问题已经很好地介绍了。更深入地说,print\u int\u array(int*array,int len)
,IMO,并不是一个很好地使用“复合文字”的例子,因为这样一个函数应该像print\u int\u array(array,sizeof array/sizeof array[0])那样以最小的相互依赖性调用代码>不确定在这里如何使用复合文字。
print_int_array((int[]){1, 1, 2, 3, 5}, 5);