将数组从文件 1 中的方法传递到文件 2 中的方法,而无需在方法中使用额外参数

Passing an array from a method in file 1 to a method in file 2 without using a extra parameter in a method

我在 global_array_of_file2.Idea 中获取全零是为了从 file1.c

获取更新值
        ========================file1.c===========================  
    #include <stdio.h>
    #include <string.h>
    int global_array_of_file1[10];


    void func1(int a1,int b)
    {
      int array1_of_func1[10] = {0};
      int a;
       array1_of_func1[5] = 23;
       array1_of_func1[6] = 34;

    memcpy(global_array_of_file1,array1_of_func1,10*sizeof(int));
     for (a = 0; a < 9; a++)
     {
       printf("from func_1 : global_array = %d \n " , global_array_of_file1[a]);

     }
    }

    void init_pointer(int *tmp)
    {

      tmp = global_array_of_file1;

    }
    ~  


        ==========================file2.c======================
#include<stdio.h>
#include "file1.h"
int global_array_of_file2[10] = {0};
int main()
{
  int i;
  init_pointer(global_array_of_file2);

  func1(3,4);

  for(i = 0; i < 9 ; i++)
  {

  printf("global_array_of_file2 = %d \n" , global_array_of_file2[i]);
  }


return 0;


}

        ========================file1.h===========================  

            void init_pointer(int *tmp);
            void func1(int a,int b);

memcpy 错误。您只需复制 10 个字节。

一个 int 通常是 4 字节长(32 位),因此您只复制数组的一部分,即前十个字节,因此您只复制索引为 0、1、2 和 4 的一半的整数。

你需要复制 10 * sizeof(int)

好的,我认为可以通过执行以下操作轻松解决此问题:

在 file1.c

中声明 extern int global_array_of_file1[10]

定义整数 global_array_of_file1[10] = {0};在 file2.c

然后我什至不需要从 file2.c 初始化指针(不需要调用 init_pointer)并且额外的 RAM 也将被保存:) !

这里有两个问题:

第一期是:

init_pointer 的代码什么都不做:

void init_pointer(int *tmp)
{
  tmp = global_array_of_file1;
}

因为 tmp 变量是输入变量的副本(按值调用),它什么都不做。 要让它正常工作,它应该是这样的:

void init_pointer(int **tmp)
{
  *tmp = global_array_of_file1;
}

但是,由于global_array_of_file2被声明为数组,它实际上是一个静态指针,不能改变,所以你不能用**tmp= global_array_of_file1这样的语句修改它的值。

因此,要使其工作,您应该在 init 指针方法中调用 memcpy: 像这样:

void init_pointer(int *tmp)
{
    memcpy( tmp, global_array_of_file1, 10 * sizeof(int) );
}

第二个问题,是main的代码,首先调用init_pointer(什么都不做),然后调用'func1'初始化数组。顺序应相反。首先调用 func1 为数组设置适当的值,然后调用 init_array 方法将此信息复制到全局数组 2。 所以而不是

  init_pointer(global_array_of_file2);
  func1(3,4);

应该是

  func1(3,4);
  init_pointer(global_array_of_file2);

如果您想在文件 2 中获得 global_array_file1 的 副本,这就是全部。

如果需要,您可以让文件之间共享相同的数组,这样做:

at file1.h 将数组声明为 extern:

 extern int global_array_of_file1[10];

然后你可以简单地在 file2.c 中使用它,其中包括 file1.h