【问题标题】:C language Pointers troubleC语言指针问题
【发布时间】: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_arrint 的二维数组,但您分配new_arr[i]=constantly_changing_variable,它正试图将int* 分配给该数组。这甚至不能在我的环境中编译。我认为你真正想要的是一个由 5 个 int* 组成的数组分配给:int *new_arr[5];
  • fillarrfirst 返回它们传递的相同数组。因此,您将所有内容都设置为指向 arr 的指针。
  • 如果你不希望它们都指向同一个数组,你需要用malloc()memcpy()复制数组

标签: arrays c loops pointers


【解决方案1】:

您正在尝试用 3 的数组大小填充一个 3x5 数组。

您的方法的问题是,最后,您的数组是 {5,5,5} 并且所有其他人都指向它。

另外,我没有理解代码的重点,所以我无法提供进一步的帮助;但这是您代码中的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    相关资源
    最近更新 更多