所以,我有一个包含 1 个值的数组。然后我将它复制(分配)到另一个数组。但是,如果我更改第二个数组的值,第一个数组的值也会更改。这是我的代码:
#include <stdio.h>
void change(int a[]){
int *temp = a;
for(int i=0; i<2; i++){
a[i] = temp[0]*10+7;
}
//What I expect for the result is a[0] = 7, a[1] = 7 instead of a[0] = 7, a[1] = 77
}
int main(){
int num[1];
num[0] = 0;
change(num);
printf("%d", num[0]);
return 0;
}
我的数组怎么了?
编辑:我想复制值,而不是数组的地址
编辑 2:我对上面的代码进行了一些更改,以使其更清楚我想要什么。
首先,这个声明
void change(int a[]);
与此声明等效
void change(int *a);
第二(有关更多信息,请参阅此链接),
C语言无一例外都是按值传递的。将指针作为参数传递并不意味着通过引用传递。
因此,您正在传递指针地址的副本(指向相同的数组/地址)。然后,您只需取消引用数组的第一个位置并为其分配一个值(这里实际上只是指针运算)。
也许它有助于重写代码以使指针算法更明显:
#include <stdio.h>
void change(int *a){
int temp[1];
*(temp+0) = *(a+0);
*(a+0) = *(temp+0) * 10 + 7;
}
int main(){
int num[1];
*(num+0) = 0;
change(num);
printf("%d", *(num+0));
return 0;
}
我不知道如何理解 编辑
编辑:我想复制值,而不是数组的地址
查看代码我无法理解您可能想要尝试实现的目标。请澄清这一点。
阅读了您的说明后,我了解到您不想修改main
函数中的数组元素,而是在函数中修改它们change
。
答案是你不能那样做。解释如上所述。我建议你花点时间学习 C 中的指针运算和数组。K&R 书在这方面非常出色;我真的推荐这本书。
您可以做的是将数组的内容复制到另一个数组中并修改该数组;例如在函数的开头或在调用函数并将复制的数组作为参数传递之前。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句