如果这是一个“基础”问题,我很抱歉,因为我刚接触C语言,找不到答案。我的问题是关于在函数内部需要使用malloc
来分配变量内存并返回其指针,与在函数内创建变量并通过return
返回结果之间的区别。
首先要考虑的问题是,在函数内声明的任何变量都会在函数终止时被销毁;那么为什么下面的代码是有效的:
int add(int a, int b)
{
int result;
result = a + b;
return result;
}
但以下内容不是吗?
char *concat(char* a, char* b)
{
char result[10];
strcat(result, a);
strcat(result, b);
return result;
}
你得到的警告是你正在返回一个局部变量的地址,但这也是我们在第一个函数中所做的?行为是否因类型而异?
举个更真实的例子,我非常困惑应该使用以下两个函数中的哪一个,因为它们都很适合我的程序:
struct Card *card_create(enum Rank rank, enum Suit suit)
{
struct Card *card = malloc(sizeof(struct Card));
if(card == NULL) {
fprintf(stderr, "malloc: %s", strerror(errno));
return NULL;
}
card->rank = rank;
card->suit = suit;
return card;
}
或者:
struct Card card_create(enum Rank rank, enum Suit suit)
{
struct Card card;
card.rank = rank;
card.suit = suit;
return card;
}
再次抱歉,如果这是一个新手问题,但我真的很希望能得到解释。谢谢!