【发布时间】:2015-02-24 17:51:18
【问题描述】:
我想学习如何通过引用将结构数组传递给从first function 中调用/执行的second function。我的目标是从second function only 修改/更改任意结构的内容。下面的代码有效,但不幸的是,它并没有完全达到我想要实现的效果。我可以访问second function 中的任意结构。换句话说,我想通过在main 中调用/执行first function 来处理for 内的所有结构(使用for 循环)仅一次 并且不使用for 循环。
second function,在下面的代码中,被命名为passByReference_inner。
array_of_struct.h:
struct card
{
int face;
int nose;
};
typedef struct card HEAD ;
/* prototype */
extern void passByReference(HEAD **c); /* first function */
extern void passByReference_inner(HEAD *c); /* second function */
第一个函数:(passByReference)
#include <stdio.h>
#include "array_of_struct.h"
void passByReference(HEAD **c)
{
passByReference_inner (*c); /* second function */
}
第二个函数: (passByReference_inner)
#include <stdio.h>
#include "array_of_struct.h"
void passByReference_inner(HEAD *c)
{
c->face = (c->face) + 1000;
c->nose = (c->nose) + 2000;
}
主要:
#include <stdio.h>
#include "array_of_struct.h"
int main(void)
{
int i;
static HEAD c[12];
static HEAD *cptr[12];
for ( i = 0; i < 12; i++ )
{
c[i].face = i + 30;
c[i].nose = i + 60;
cptr[i] = &c[i];
}
for ( i = 0; i < 12; i++ )
{
passByReference(&cptr[i]); /* first function */
}
return 0;
}
【问题讨论】:
-
我希望所有的问题都像这样......
-
C语言不能按引用传递,只能按值传递;但是,它可以传递一个指针。
-
在 main() 中,变量 'cptr' 和所有用法都可以完全替换为对 '&c[i]' 的引用
-
在 main() 这一行:'cptr[i] = &c[i]' 什么都不做,可以消除
-
在代码中,数字“12”是出现在代码中多个位置的“神奇”数字。该数字应由#define MAX_COUNT (12) 定义,然后在当前使用“12”的所有地方使用 MAX_COUNT。