【发布时间】:2021-07-14 04:14:45
【问题描述】:
我只想使用变量创建一个数组。但是我的变量是不断变化的,我的变量是一个指针。所以,每次我的变量改变时,我的数组的所有元素都会改变。如何预防?
类似于我自己的代码:
#include <stdio.h>
#include <stdlib.h>
int *fillarr(int *arr){
(.......)
return arr;
}
int *first(int *arr){
(.....)
return arr;
}
int main(){
int new_arr[5][3];
int *arr=(int *)malloc(sizeof(int)*3);
for (int i=0;i<3;i++){
scanf("%d",&arr[i]);
}
int *constantly_changing_variable=first(arr);
new_arr[0]=constantly_changing_variable;
for (int i=1;i<5;i++){
constantly_changing_variable=fillarr(constantly_changing_variable);
new_arr[i]=constantly_changing_variable;
}
/* PRINT ARRAY*/
}
The output I wanted:
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
Real output:
5 5 5
5 5 5
5 5 5
5 5 5
5 5 5
Step by step loop
first loop;
ARRAY;
2 2 2
2 2 2
second loop;
ARRAY;
3 3 3
3 3 3
3 3 3
third loop;
ARRAY;
4 4 4
4 4 4
4 4 4
4 4 4
fourth loop;
ARRAY;
5 5 5
5 5 5
5 5 5
5 5 5
5 5 5
.......................
【问题讨论】:
-
好吧,我无法重现该错误,因为您提供的代码示例没有进行数组打印(您打印的究竟是什么数组?),但我确实看到了一些奇怪的东西。
new_arr是int的二维数组,但您分配new_arr[i]=constantly_changing_variable,它正试图将int*分配给该数组。这甚至不能在我的环境中编译。我认为你真正想要的是一个由 5 个int*组成的数组分配给:int *new_arr[5]; -
fillarr和first返回它们传递的相同数组。因此,您将所有内容都设置为指向arr的指针。 -
如果你不希望它们都指向同一个数组,你需要用
malloc()和memcpy()复制数组