我在修改函数内部的指针时遇到了一个(可能是非常基本的)问题。我想将一个 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/