2

我刚刚开始了我的返璞归真项目;学习 C。老实说,当您需要开发桌面/服务器应用程序时,抽象很好,但是使用 C,事情变得个人化了。这很好,为了改变!

现在说到重点;我正在阅读使用带有函数的数组(Programming in 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);
}

我没有得到有关返回数组或指向数组的指针的函数的信息。该函数会更改其参数中的数组,从而导致副作用(如上所示)。

函数是否可以返回指向数组的指针?还是上述方法只是首选?

提前感谢那些可以提供解释的人。

4

2 回答 2

1

函数可以返回指向数组第一个元素的指针,但问题更大,您要么必须拥有数组malloc的内存(如strdup),要么拥有静态数组(如ctime)。

malloc给出了必须记住释放内存(内存泄漏)的问题,静态意味着每次调用都会更改数组,因此传递现有数组更容易。

于 2013-06-10T20:51:36.293 回答
0

我不确定我是否遵循。您的函数是 void 类型。您是否尝试通过将数组作为参考传递来修改数组?

在 C 中,如果返回指向数组第一个元素的指针,则实际上返回整个数组,因为 C 数组在程序内存中是连续的(可能不在物理内存中)。因此,当您返回指向第一个元素的指针时,您有效地告诉您的主函数整个数组的存储位置。

于 2013-06-10T20:44:56.377 回答