从代码中可以看到,从函数中提取字符串是我使用的两种方法,第一种是使用指针,第二种是使用全局数组。两者都有相同的结果,但是我想知道使用一个或另一个是错误的,因为他们建议我在没有给出解释的情况下不要使用全局变量。
原谅我的无知,很遗憾,我没有人要问,在搜索引擎中,我还没有找到可以解决这个话题的人。
#include <stdio.h>
#include <string.h>
char MyArr[18] = {'\0'}; // Global Array //
// This function use a *Pointer //
const char * MyWordWP( void )
{
return "Hello with pointer";
}
// This function use a global array //
void MyWordArr( void )
{
strcpy(MyArr, "Hello With Array");
}
int main( void )
{
// Read pointer //
const char *MyW = MyWordWP( );
printf( "With Pointer = %s \n" , MyW );
//Set the global //
MyWordArr();
printf( "With Array = %s \n", MyArr);
return 0;
}
谢谢您的支持。
为什么不过度使用全局对象和数组的一些原因例如:
首先,使用全局对象的函数不是很可重用。标识符硬编码在源代码中。这使得该功能的使用几乎是唯一的,这通常不是最佳解决方案。相反,参数允许传递来自不同标识符的对象的值,并且在指针的情况下也传递来自不同大小的数组的地址。
从函数返回值和指针的相反过程也是如此,就像您的情况一样。请注意,在函数内部,必须使用存储类说明符声明一个对象,static
以在函数执行结束后保留在内存中,这对于返回指向函数局部对象的指针非常重要。
字符串文字的"Hello With Array"
存在超出了函数的执行范围,MyWordArr()
因为字符串文字一直驻留在内存中,直到程序完成。
其次,当源代码非常庞大时,您的代码可能变得难以为他人阅读和维护,而且对于您自己来说,也可能是您自己的代码,因为经过数百次函数调用后,您失去了一些精妙的概述,并可能会问自己:“什么是函数实际在做什么?” -与此相反,传递的参数和返回值描述了使用函数调用的意图和上下文。
第三,几乎可以从代码中的任何位置访问对象,这使得在大型程序中很难找到意外修改的原因。
第四,全局对象不是线程安全的。
因此得出结论:
这取决于使用情况。在您提供的示例中,由于程序较小且专注,它可能非常适合,但是通常,您应尝试(如果可能的话)避免使用全局对象,因为在大多数情况下,生产代码非常大,并且往往会自己砸脑。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句