我刚刚开始了我的回归项目;学习C.我会说实话,当你需要推出一个桌面/服务器应用程序时抽象很好,但是对于C来说,事情变得个性化了。这很好,换一个!
现在到了这一点;我正在阅读使用带有函数的数组(在C中编程,Stephen G. Kochan。)我已经了解到,当将函数作为参数传递时,编译器将始终将引用视为指针,如下所示:
void foo (char *array);
拿这个,例如:
void foo (char *a)
{
a[0] = 'R'; // side effect
}
int main (void)
{
char a[] = "The quick brown fox jumps over the lazy dog!";
foo (a);
}
我没有得到关于返回数组的函数或指向数组的指针的信息。该函数更改了参数中的数组,从而导致副作用(如上所示)。
函数是否可以返回指向数组的指针?或者上述方法是否优先?
提前感谢能够提供解释的人。
答案 0 :(得分:1)
一个函数可以返回一个指向数组第一个元素的指针,但是它更有问题,你需要malloc
数组的内存(如strdup
)或者有一个静态数组(比如ctime
)。
malloc
给出了必须记住释放内存(内存泄漏)的问题,静态意味着数组随着每次调用而改变,因此传递现有数组更容易。
答案 1 :(得分:0)
我不确定我会效仿。您的函数类型为void。您是否尝试通过将其作为参考传递来修改数组?
在C中,如果返回指向数组第一个元素的指针,则有效返回整个数组,因为C数组在程序存储器中是连续的(可能不在物理存储器中)。因此,当您将指针返回到第一个元素时,您可以有效地告诉主函数存储整个数组的位置。