Arrays C中函数参数中的固定数组或指针之间的差异?
以下两者之间是否有区别:Arrays C中函数参数中的固定数组或指针之间的差异?,arrays,c,parameters,implicit-conversion,function-declaration,Arrays,C,Parameters,Implicit Conversion,Function Declaration,以下两者之间是否有区别: void draw_line(float p0[2], float p1[2], float color[4]); 这是: void draw_line(float *p0, float *p1, float *color); 在C中 列表项 在C和C++中,函数声明没有区别。 具有数组类型的函数参数由编译器隐式调整为指向数组元素类型的指针 来自C标准(6.7.6.3函数声明器(包括原型)) 7应调整“类型数组”的参数声明 指向“类型的限定指针”,其中类型限定符(如
void draw_line(float p0[2], float p1[2], float color[4]);
这是:
void draw_line(float *p0, float *p1, float *color);
在C中
在C和C++中,函数声明没有区别。
具有数组类型的函数参数由编译器隐式调整为指向数组元素类型的指针 来自C标准(6.7.6.3函数声明器(包括原型)) 7应调整“类型数组”的参数声明 指向“类型的限定指针”,其中类型限定符(如果有) 是在数组类型派生的[and]中指定的那些 因此,这些声明void draw_line(float p0[2], float p1[2], float color[4]);
void draw_line(float *p0, float *p1, float *color);
声明相同的一个函数,并且两者都可以出现在程序中,尽管编译器可以发出一条消息,说明存在冗余声明
< C和C++之间的区别在于,C中可以指定括号限定符和一个带有关键字静态的表达式,指定了参数提供访问的元素数量。
在C和C++中,一个数组作为参数的参数也隐式地转换为指向其第一个元素的指针。
那么,在浮点P0(2)上有什么意义?只需为该函数的调用者提供更多的上下文,就可以了?@FrameBuffer它是用于自我文档的。同样,在C中,您可以使用括号内的关键字static来指定参数应提供对指定数量元素的访问。标准的另一个相关段落应为:进入函数时,将计算每个可变修改参数的大小表达式,并将每个参数表达式的值转换为相应参数的类型,就像通过赋值一样。(作为参数的数组表达式和函数指示符在调用之前已转换为指针。)“至于“对应的实际参数的值应提供对数组第一个元素的访问,该元素的数量至少与大小表达式指定的元素数量相同”,据我所知,它是(1)编译器没有检查的东西,(2)函数中不可用的信息(大小)。我问这个问题实际上是因为@RobertoCaboni中的注释。说真的,我自己没有使用这个功能。