2013-01-15 52 views
-3
double *f(int n, double v) 
{ 
    double *a, *p; 
    a = malloc(n * sizeof(double)); 
    if (a != NULL) 
    for (p = a; p < a + n; p++) 
     *p = v; 
    return a; 
} 

你能解释一下这个功能需要什么吗?它是否复制n中的v的内容?如果是的话,它为什么会返回一个?我真的不明白...先谢谢了。这个C函数有什么作用?

+2

在我看来,我建议在提出这些问题之前先研究一点C。最好的祝愿! – Kyrol

+0

有一个无限数量的C函数(谁显然不知道关于C)可能不理解......为什么不把它们全部发布到SO? –

回答

3
double *f(int n, double v) 
{ 
    double *a, *p; 
    a = malloc(n * sizeof(double)); // allocate memory enough for "n" doubles (an array) 
    if (a != NULL)     // if the allocation was successful 
    for (p = a; p < a + n; p++) // loop from the beginning of the array to the end 
     *p = v;    // fill every element of the array with the value "v" 
    return a;     // return the new array 
} 

所以,如果我调用此函数:

double * myarray; 
myarray = f(3, 1.3); 

现在我有:

myarray[0] = 1.3 
myarray[1] = 1.3 
myarray[2] = 1.3 

因此,要回答你的问题:

你能解释我这是什么函数需要什么?

  • 分配并初始化一个双精度数组。

是否复制n中的v的内容?

  • 号考虑v是一张双人床和n是一个int,甚至不意义。它使数组n变大,并使用值v对其进行初始化。

如果是,为什么会返回?

  • 它返回a所以你必须在新创建的数组的引用。 (请参阅上面关于如何使用它的示例)
6

如果分配失败,它返回一个新分配的double数组,大小为n,数值为vNULL

这个循环:

for (p = a; p < a + n; p++) 
    *p = v; 

使用指针运算。由于p是指向double的指针,因此增加它将指向下一个要写入的双精度值。 *p = v在指定位置写入double。

3

它分配一个n双精度数组,初始化数组中的每个元素的值为v

该函数返回a以允许调用者使用这个新分配的数组。

0

复制的v n次成浮点

该阵列在功能分配,并包含n浮子元件的阵列。

在函数数组a中的每个元件的端部含有v作为值

1

它allocs的n * sizeof(double)字节和enterely存储区域,并v值填充它

+0

这有点让人误解,因为它听起来好像“v”是一个字节,但实际上并非如此。 – unwind

1

分配Ñdouble数组在堆中,用v填充并将指针返回给它?