C - 使用指针返回修改后的整数数组

问题描述 投票:0回答:1

我正在尝试修改C中的整数数组,最后我想返回一个指向该数组的指针,但似乎不起作用

int *h(int *a) {
 int b[10];
 while(*a) {
  *b = *a;
  b++;
  a++;
 }
 return b;
}

我不知道该怎么办,我是 C 新手

arrays c function pointers
1个回答
0
投票

您的代码存在一些问题。

首先,您已将

b
声明为函数内的本地数组。在 C 中,本地数组位于堆栈中,这意味着它们会在函数完成后被清理。当您返回指向
b
的指针时,实际上您指向的位置一旦函数退出就不再属于您了。

其次,你要尝试增加数组本身

b
。在 C 语言中,数组的名称是一种指向第一个元素的常量指针。您无法像普通指针一样移动它。

现在,我们该如何解决这个问题?有以下几种方法:

  1. 与其在函数内部创建

    b
    ,为什么不在外部创建它并传入它呢?这样,您就可以在函数之外管理它的生命周期,并且不存在函数结束后它消失的风险。

  2. 第二种解决方案。使用

    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
}
© www.soinside.com 2019 - 2024. All rights reserved.