2014-05-03 176 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 
}