我试着在C中修改一个整数数组,最后我想返回一个指向该数组的指针,但似乎不起作用
int *h(int *a) {
int b[10];
while(*a) {
*b = *a;
b++;
a++;
}
return b;
}
我不知道该怎么做,我是新手
我试着在C中修改一个整数数组,最后我想返回一个指向该数组的指针,但似乎不起作用
int *h(int *a) {
int b[10];
while(*a) {
*b = *a;
b++;
a++;
}
return b;
}
我不知道该怎么做,我是新手
您的代码有一些问题.
首先,您在函数中将b
声明为局部array.在C语言中,局部数组驻留在堆栈上,这意味着它们会在函数完成后被清除.当您返回一个指向b
的指针时,实际上您指向的是一个在函数退出后不再属于您的位置.
其次,还有一件事,你想要递增b
,数组本身.在C中,数组的名称是指向第一个元素的常量指针.你不能像普通的指针一样移动它.
现在,我们如何解决这个问题?有几种方法:
与其在函数内部创建b
,为什么不在外部创建并直接传入呢?这样,您可以在函数外部管理它的生命周期,并且在函数结束后它不会有消失的风险.
第二种解决方案.使用malloc
动态分配b
.这会将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
}