#include <stdio.h>
void func(int arr[],int xNumOfElem)
{
int j;
for(j=0; j<xNumOfElem; j++)
{
arr[j] = j + arr[j];
printf("%d\t",arr[j]);
}
printf("\n");
}
int main()
{
int *a,k;
a = (int*) malloc(sizeof(int)*10);
for(k = 0; k<10; k++)
{
a[k] = k;
printf("%d\t",a[k]);
}
printf("\n");
func(a,10); //Func call
free(a);
}
在函数“func”中为动态数组“arr”分配/释放内存。
arr是一个函数参数。
答案 0 :(得分:1)
您不传递数组,只将指针传递给int。这条线
void func(int arr[],int xNumOfElem)
只是另一种写作方式
void func(int* arr,int xNumOfElem)
编译器本身不能为a的副本分配内存,因为a的大小是动态的,因此编译器不知道。在调用func之后打印a的值以查看a已更改。
要获取副本,请将您的func方法更改为:
void func(int const* const b,int xNumOfElem)
{
int* arr = malloc(sizeof(int)*xNumOfElem);
memcpy(b,arr,xNumOfElem);
int j;
for(j=0; j<xNumOfElem; j++)
{
arr[j] = j + arr[j];
printf("%d\t",arr[j]);
}
printf("\n");
free(arr);
}
答案 1 :(得分:0)
不需要在函数arr
中为数组fun
分配内存。在调用main
之前,数组的内存在fun
函数中分配。同样main
在使用内存完成后释放内存;所以fun
也不需要解除分配。
答案 2 :(得分:0)
这样想:
void func(int arr[],int xNumOfElem)
{
int j;
for(j=0; j<xNumOfElem; j++)
{
arr[j] = j + arr[j];
printf("%d\t",arr[j]);
}
printf("\n");
}
相当于:
void func(int *arr /* look here */,int xNumOfElem)
{
int j;
for(j=0; j<xNumOfElem; j++)
{
arr[j] = j + arr[j];
printf("%d\t",arr[j]);
}
printf("\n");
}