c - 在函数中修改 vector

标签 c function pointers vector

我在修改函数内部的指针时遇到了一个(可能是非常基本的)问题。我想将一个 vector 传递给一个函数。该函数创建了一个类似的 vector (相同的大小、类型等...),然后我想将这个新 vector 分配给我的旧 vector 。

这里有一些代码来模拟正在发生的事情

#include <stdio.h>
#include <stdlib.h>

void change(int *vec){
  int i;
  int vec2[10];

  for(i=0;i<10;i++) vec2[i]=i+1;

  vec=vec2;
}

int main(){
  int i,ind[10];

  for(i=0;i<10;i++) ind[i]=i;

  for(i=0;i<10;i++) printf("%d ",ind[i]);
  printf("\n");

  change(ind);

  for(i=0;i<10;i++) printf("%d ",ind[i]);
  printf("\n");

  return 0;
}

这个程序的输出只显示了原始 ind vector 的两倍

0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9

我愿意

0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 10

请注意,这不是我的实际代码,只是一个更小的版本来显示问题。我知道,在这个版本中,我可以只修改函数内部的 vec 并收工,但在我的原始代码中,我必须对另一个 vector 进行操作,最后修改原始 vector 。

最佳答案

替换你的change函数
void change(int *vec){
   int i;
   for(i=0;i<10;i++) vec[i]=i+1;
}

并理解数组参数是 decayed into pointers .参见 this .

如果您真的想将数组视为值,请将它们包装在一些 struct 中,例如

struct myarray_st {
  int arr[10];
};

然后编码例如

struct myarray_st increment(const struct myarray_st*p, int x)
{
   struct myarray_st res;
   for (int i=0; i<10; i++) res.arr[i] = p->arr[i]+x;
   return res;
}

或者使用一些指针作为输出参数,例如

void 
increment_it(struct myarray_st*dst, const struct myarray_st*src, int x)
{
   for (int i=0; i<10; i++) dst->arr[i] = src->arr[i]+x;
}

然后代码举例

struct myarray_st t1, t2;
memset (&t1, 0, sizeof(t1));
memset (&t2, 0, sizeof(t2));
t2 = increment(&t1,7);
increment_it(&t2,&t1,12);

关于c - 在函数中修改 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20827618/

相关文章:

c - gcc 编译器中是否有用于 pthread 代码的标志以最小化执行时间?

c++ - 在哪里可以找到 C++ 的 ZwCreateFile 示例?

c - 使用 C 预处理器宏进行函数命名是否符合习惯?

c - 删除使用 __attribute__((section)) 创建的部分

javascript - 如何在 Angular JS Factory 中定义多个函数并在另一个函数中调用一个函数

c++ - operator== 作为 std::function 的默认值

function - 组合 (a -> Maybe a) 和 (an -> a) 函数

c++ - 指向具有数组索引运算符重载的类的指针

c - 指针数组和括号内的指针

c - 如何声明一个指向 unsigned char 数组的全局指针并修改值?