将数组从文件 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
我在 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