c语言的**


#include 
    int t2 = 2;//栈上一个4字节存储这个1
    int *p2 = &t2;//获取栈上t的地址 放到栈上的8个字节空间里
void test1(int*  hash){

    *(int **)hash = p2; //把main函数栈上t的值修改成跑p2的值,如果*hash = p2这样写的话 语法不通过,因为不能把一个 int* 赋值给int  所以这里强转了** 然后*解了一次引用成了t的地址,在那放上了p2的值  也就是t2的地址    语法上的约束
 
    p2 = hash;

}

int main(int argc, char **argv)
{
    int t = 1;

    int *p = &t;
     printf("%p\n",p);
     printf("%p\n",p2);
    test1(p);
     printf("%p\n",t);
     printf("%p\n",p2);

   return 0;
}

你可能感兴趣的:(c语言)