我正在尝试修改C中的整数数组,最后我想返回一个指向该数组的指针,但似乎不起作用
int *h(int *a) {
int b[10];
while(*a) {
*b = *a;
b++;
a++;
}
return b;
}
我不知道该怎么办,我是 C 新手
您的代码存在一些问题。
首先,您已将
b
声明为函数内的本地数组。在 C 中,本地数组位于堆栈中,这意味着它们会在函数完成后被清理。当您返回指向 b
的指针时,实际上您指向的位置一旦函数退出就不再属于您了。
其次,你要尝试增加数组本身
b
。在 C 语言中,数组的名称是一种指向第一个元素的常量指针。您无法像普通指针一样移动它。
现在,我们该如何解决这个问题?有以下几种方法:
与其在函数内部创建
b
,为什么不在外部创建它并传入它呢?这样,您就可以在函数之外管理它的生命周期,并且不存在函数结束后它消失的风险。
第二种解决方案。使用
b
动态分配 malloc
。这会将 b
放在堆上,而不是堆栈上,因此在函数结束后它会保留下来。请记住,您分配的内容,您必须取消分配。所以,完成后你需要free
这个内存,否则就会出现内存泄漏。
您的问题的可能解决方案:
void h(int *a, int *b, int size) {
for (int i = 0; i < size; i++) {
b[i] = a[i];
}
}
int main() {
int a[] = {1, 2, 3, 4, 5};
int b[5];
h(a, b, 5);
//use b here
}