【发布时间】:2016-07-20 10:45:33
【问题描述】:
有没有办法在每次调用函数后返回一个用 static 关键字分配的新数组?如果我对函数进行克隆,我可以创建一个新数组,但不能从同一个函数中创建。
考虑以下程序:
#include <stdio.h>
char *CrArray1(void);
char *CrArray2(void);
int main(void)
{
char *p1 = CrArray1();
strcpy(p1, "Hello, ");
char *p2 = CrArray1();
strcat(p2, "World");
char *q1 = CrArray2();
strcpy(q1, "Different String");
printf("p1 is : %s\n", p1);
printf("q1 is : %s\n", q1);
return 0;
}
char *CrArray1(void)
{
static char Array[128];
return Array;
}
char *CrArray2(void)
{
static char Array[128];
return Array;
}
【问题讨论】:
-
可以,返回本地静态对象地址即可。但每次调用同一个函数时,它都是同一个对象。如果功能不同,则不同。
-
@Serhio 这不是问题所在。 OP希望从函数的每次调用返回new数组
-
不,没有。具有静态存储的对象由编译器放置到一个特殊的内存部分中。所以他们必须在构建时都知道。
-
@machine_1 您能描述一下您的实际问题吗?为什么你希望这些数组是静态的?简短的回答是否定的,静态内存不是在运行时分配的
-
您不会为函数的每次调用获得一个 new 数组。这绝对不是
static所做的。相反static确保它是同一个数组并且它存在于整个程序执行中。所以答案是否定的。