2014-05-03 175 views
-1

我試圖在函數中傳遞一個單指針雙指針。但它給我錯誤。將單指針和雙指針傳遞給函數c

int main() 
{ 
    int *pt; 

    fun(pt); 
    . 
    . 
} 

fun(int *pt) 
{ 
    pt=(int*)malloc(6*sizeof(int)); 
    . 
    . 
} 

和什麼是我們使用雙指針時的語法。任何人都可以用一個例子來描述它,或者可以編輯上面的例子。我會非常感謝你。

+1

你說這是給你一個錯誤。它給了什麼錯誤?另外,你所遵循的教程是關於指向指針的指針的? – AntonH

+2

您的主要錯誤。你的意思是'int main(void)'。這裏沒有雙重指針。如果您的程序出現錯誤,請顯示該程序並逐字包括錯誤。 –

+2

你能解釋一下「雙指針」是什麼意思嗎?你的意思是你想'fun'來修改指針,使得'main'接受這個修改(如果通過'fun's參數完成,它將是一個指針指針)? – lurker

回答

3

參考語義的基本想法是,一個函數修改存在的函數自身範圍之外的一些其他對象。您可以通過將引用的對象的地址傳遞給一個接受類型爲「指向對象類型的指針」參數的函數的地址來實現C中的引用語義。

的「通過指針引用語義」的關鍵標誌是由這兩點:

  • 主叫(通過& - 運算符)採用的東西地址。
  • 被調用者解除參數引用。

例如:

來電:

T x; 
f(&x);   // address-of 

被叫:

void f(T * p) // take argument as pointer 
{ 
    (*p).y = 20; // dereference (via *) 
    p->x = 10; // dereference (via ->) 
} 

在你的情況,T = int *

int * pt; 
fun(&pt);    // function call takes address 

void fun(int ** p)  // function takes pointer-to-object... 
{ 
    *p = malloc(173); // ...and dereferences to access pointee 
}