如何通过引用传递一个数组中的函数?
我有以下代码初学者编码器:
int main()
{
struct* Array[malloc(10*sizeOf(struct)];
/* I then fill the struct. (int num,float points)
* I then want to pass this array that I've filled up to a sortList function,
* which then outputs the sorted array back to main().
*
* Then I want to output the array as: "number, points" */
}
struct struct
{
int number;
float points;
}
void sortList()
{
/*sort Array, then return sorted array*/
}
我将如何传递数组,然后回来?
任何链接或建议都非常有帮助。
如何通过引用传递数组...?
当一个数组a
被传递给函数foo(a)
,它是实际参数。在C中,当数组传递给一个函数,而不是整个数组被赋予foo()
时,表达式a
被转换为数组第一个元素的地址。
除了当它是
sizeof
操作者的操作数时,_Alignof
操作者,或一元&
操作者,或者是用于初始化数组文本的字符串,其具有输入“”类型的阵列'的表达式被转换为一个表达式,其类型为'指向类型''的指针指向数组对象的初始元素,而不是左值。 ... C11dr§6.3.2.13
所以foo()
被赋予一个地址int *
。让我们假设值为1234
。
功能void foo(int *fa)
内部,形式参数fa
取值为1234
。
从呼叫者的角度来看,这是通过参考,因为a
受foo()
的影响,并且该函数收到“参考”。从功能的角度来看,这是通过价值,因为fa
获得转换后的a
的副本。在C中,当人们说C没有通过引用传递任何东西时,通常会提到这种第二种观点。在这两种情况下,fa
是int *
而不是数组。
foo()
在变量fa
中的地址为main
的a
。所以代码fa[0] = 456
设置了一个值,该值在foo()
完成后仍然可见。
void foo(int *fa) {
fa[0] = 456;
}
int main(void) {
int a[5];
a[0] = 123;
printf("%d\n", a[0]); // prints 123
foo(a);
printf("%d\n", a[0]); // prints 456
return 0;
}
我用一个简单int
阵列来解释的东西。然而原始代码还有其他问题。下面是如何分配内存的想法。
// struct* Array[malloc(10*sizeOf(struct)];
struct ok12type* ok12Array = malloc(sizeof *ok12Array * 10);
....
// Do stuff with ok12Array
...
free(ok12Array);
ok12Array = NULL;
// Do _not_ do stuff with ok12Array
代码似乎是错误的。在C中,数组总是按引用传递。
首先你应该命名你的结构。我在下面的例子中给它起了名字typename
。
分配内存,你想:
struct typename *Array = malloc(10*sizeof(struct typename));
数组传递给函数很容易,只需要声明你的函数为:
void sortList(struct typename *Array)
{
}
然后,您可以在阵列上直接运行该函数,因为数组总是通过引用传递,绝不传递值。
所以,你的程序可能看起来像:
struct typename
{
int number;
float points;
}
int main()
{
struct typename *Array = malloc(10*sizeof(struct typename));
Array[0].number = 5;
Array[0].points = 7;
Array[1].number = 2;
Array[1].points = 11;
/* Fill the rest of the array. */
/* Sort it. */
sortList(Array);
}
void sortList(struct typename *Array)
{
/* Do your sorting here. */
}
'结构*数组[malloc的(10 *整型尺寸(结构)];'哪种语言 –
'结构*数组[malloc的(10 *整型尺寸(结构)〕;'这是什么有人教' malloc()'今天错了,第二篇文章有这样一个严重问题 –
这是C.对不起,这就是我学会如何分配内存给一个有10个条目的数组! – starter1011