将数组(不是指针)传递到c中的结构

将数组(不是指针)传递到c中的结构,c,arrays,pointers,struct,C,Arrays,Pointers,Struct,我尝试了很多方法将数组传递给函数,但它一直在确定我作为指针传递给函数的类型。有人能帮忙吗 typedef struct Process { int id; int arrival; int life; int address[10]; //contain address space(s) of the Process struct Process *next; } Process_rec, *Process_ptr; Process_ptr addProcess(Process_ptr ol

我尝试了很多方法将数组传递给函数,但它一直在确定我作为指针传递给函数的类型。有人能帮忙吗

typedef struct Process 
{
int id;
int arrival;
int life;
int address[10]; //contain address space(s) of the Process
struct Process *next;
} Process_rec, *Process_ptr;

Process_ptr addProcess(Process_ptr old,int a, int b, int c, int d[10]) 
{
...
Process_ptr newProcess = (Process_ptr) malloc(sizeof(Process_rec));
newProcess->address = d;
...
}

main()
{
int address[10] = { 0 };
...
for loop
{
address[i] = something
}
p = addProcess(p, id,arrival,life,address);
我试图将构造函数中的数组更改为指针,但是,我创建的所有进程最终都会与我创建的上一个进程具有相同的数组


如果我使用上面的代码,应该将main中的数组地址[10]粘贴到function,然后从function粘贴到struct。我一直遇到一个错误“当从类型“int*”分配给类型“int[10]”时,类型不兼容”,这意味着它将函数中的数组d[10]视为指针,但我确实使用了数组而不是指针

如@Keith Thompson所述,如果您定义:

Process_ptr addProcess(Process_ptr old,int a, int b, int c, int d[10])
…那么
d
实际上是一个指针,即完全等同于
int*d

您要做的是:

memcpy(newProcess->address, d, 10*sizeof(d[0]));

顺便说一下,您不需要强制转换
malloc
的结果。请参见

d
是如上所述的指针,核心应该是:

newProcess->address=d


地址
是一个静态数组,而不是指针。数组名称表示数组的地址,不能修改。

C不支持数组类型的函数参数。阅读@KeithThompson的第6节,我猜是这样的,并将struct中的地址改为指针类型,但是,我最终拥有和进程指向同一地址,因为它都指向main中的地址数组。主进程中的地址将一直更改,直到最后一个进程被读取。你能建议我如何有效地复制这些值吗?我可以做一个循环,但这似乎不是正确的方法。谢谢!我添加了newProcess->address=malloc(sizeof(int)*10);memcpy(newProcess->address,d,10*sizeof(d[0]);而且它能按预期工作!!我知道内存操作方法在C语言中是非常基本的,我以后一定会探讨它们