void test(void *a);
a在函数内部赋值。为什么在函数内部赋的值和外部调用此函数得到的指针值不一样?我现在是用指针的指针处理此问题,是不是使用const也可以解决此问题。谁能给我讲讲具体的原理。

解决方案 »

  1.   

    a是一个指针,参数为void *a时,是以值传递的方式传参的,此时函数内部修改的其实是a的副本,可以改变a所指向物的值,但不能修改a的指向。要修改a的指向,就必须用a的指针,即指针的指针。
    不清楚你说的用const解决此问题所指的意思,
    const void *a和void * const a是不一样的。
      

  2.   

    a是形参,在函数返回后就自动释放了,不会带回变量的值。当改成void** a后,a仍然是形参,但不同的是,你是改变了*a的值,*a是调用者分配的内存,所以这个值在函数中与函数返回后是相同的。
    其实用**的方式并不好,因为在C/C++中无法区分指针指向的是一个变量还是一个数组,推荐用引用型参数,即:void*& a。