开发者社区> 问答> 正文

通过引用在C中传递数组?

如何在C中通过引用传递结构数组?

举个例子:

struct Coordinate { int X; int Y; }; SomeMethod(Coordinate *Coordinates[]){ //Do Something with the array } int main(){ Coordinate Coordinates[10]; SomeMethod(&Coordinates); } 问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-09 11:45:45 358 0
1 条回答
写回答
取消 提交回答
  • 在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;

    2020-02-09 11:45:55
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载