如何在C中通过引用传递结构数组?
举个例子:
struct Coordinate { int X; int Y; }; SomeMethod(Coordinate *Coordinates[]){ //Do Something with the array } int main(){ Coordinate Coordinates[10]; SomeMethod(&Coordinates); } 问题来源于stack overflow
在C语言中,数组作为指向第一个元素的指针传递。它们是唯一未真正按值传递的元素(指针按值传递,但未复制数组)。这允许被调用的函数修改内容。
void reset( int *array, int size) { memset(array,0,size * sizeof(*array)); } int main() { int array[10]; reset( array, 10 ); // sets all elements to 0 } 现在,如果要更改数组本身(元素数...),则不能使用堆栈或全局数组来执行此操作,只能使用堆中动态分配的内存来执行。在这种情况下,如果要更改指针,则必须将指针传递给它:
void resize( int **p, int size ) { free( *p ); *p = malloc( size * sizeof(int) ); } int main() { int *p = malloc( 10 * sizeof(int) ); resize( &p, 20 ); } 在问题编辑中,您专门询问有关传递结构数组的问题。您有两种解决方案:声明一个typedef,或明确声明您正在传递一个结构:
struct Coordinate { int x; int y; }; void f( struct Coordinate coordinates[], int size ); typedef struct Coordinate Coordinate; // generate a type alias 'Coordinate' that is equivalent to struct Coordinate void g( Coordinate coordinates[], int size ); // uses typedef'ed Coordinate 您可以在声明类型时键入typedef(这是C语言中的常见用法):
typedef struct Coordinate { int x; int y; } Coordinate;
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。