2013-01-15 81 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填充並將指針返回給它?