欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C语言、指针的指针和野指针的问题

程序员文章站 2023-10-24 18:18:12
int _tmain(int argc, _tchar* argv[]) {     int * p = (int *) malloc(sizeo...

int _tmain(int argc, _tchar* argv[])

   int * p = (int *) malloc(sizeof(int));
   //*p = 10;
   flee(p);
   printf("%d",*p);
   //释放p
   free(p);
   printf("----");
   int * i = (int *) malloc(sizeof(int));
   flee2(&i);
   //释放i
   printf("%d",*i);
   free(i);
}
//入参为指针,仍为值传递,即副本。只有引用传递是传递p本身。
void flee(int *q)
{
  //副本修改的是指针所指变量的值,而不是指针本身。
  *q = 20;
  //出栈时副本被自动销毁,而外面的p所指变量的值被改了,但指针地址实际上未改变。
}

void flee2(int **q)
{
  //int i = 5;
  ////副本指向了一个新的位置,所以真正地修改了一个指针地址。但产生的一个问题是,原始定义的i产生了野指针。
  //*q = &i;
  //i =3;
if(q != null && *q != null)
{
 *(*q) = 5;
}
}

 

摘自 功夫 熊猫