指向指针的指针
创建指向指针的指针是可能的,而且通常是有用的。这种技术有时被称为处理,在某些情况下,操作系统希望能够自行移动堆上的内存块,这是非常有用的。下面的例子演示了指向指针的指针:
int * * p;int *问;P = (int **)malloc(sizeof(int *));*p = (int *)malloc(sizeof(int));**p = 12;Q = *p;printf (" % d \ n”*问);自由(q);自由(p);
Windows和Mac OS使用这种结构来允许堆上的内存压缩。程序管理指针p,而操作系统管理指针*p。因为操作系统管理*p, *p指向的块(* * p)可以移动,并且*p可以在不影响使用p的程序的情况下改变以反映移动。指针的指针在C中也经常用于处理函数中的指针形参。
广告
指向包含指针的结构的指针
也可以创建指向包含指针的结构的指针。下面的示例使用Addr上一节的记录:
类型定义结构{字符名称[21];char城市[21];char电话[21];char *评论;} Addr;Addr *年代;char通讯[100];s = (Addr *)malloc(sizeof(Addr));(s - >名称、20);(s - >城市,20); gets( s->phone, 20); gets(comm, 100); s->comment = (char *)malloc(sizeof(char[strlen(comm)+1])); strcpy(s->comment, comm);
指针指向一个结构体,该结构体包含指向字符串的指针。
在这个例子中,如果你不小心,很容易创建丢失的块。例如,这是AP示例的不同版本。
s = (Addr *)malloc(sizeof(Addr));得到(通讯,100);S ->comment = (char *)malloc(sizeof(char[strlen(comm)+1]));strcpy (s - >评论、通讯);自由(s);
这段代码创建了一个丢失的块,因为包含指向字符串的指针的结构在字符串块被销毁之前就被销毁了,如下所示。18新利最新登入
链接
最后,可以创建能够指向相同结构的结构,这种功能可用于在称为链表的结构中链接整个相同记录字符串。
类型定义结构{字符名称[21];char城市[21];char国家[21];Addr *下;} Addr;Addr *第一;
编译器将允许您这样做,并且只要有一点经验,就可以使用它来创建像左侧所示的结构。18新利最新登入