指向指针的指针
它通常是可能的,有用创建指向指针的指针。这种方法有时被称为一个处理,在某些情况下是有用的,操作系统希望能够移动堆上的内存块在其自由裁量权。下面的示例演示了一个指向指针的指针:
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记录前一节:
typedef struct {char[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);
指针指向一个结构,包含一个指针指向一个字符串。
在这个例子中,很容易创建块如果你不小心弄丢了。例如,这是一个不同版本的美联社的例子。
s = (Addr *) malloc (sizeof (Addr));得到(通讯,100);s - >评论= (char *) malloc (sizeof (char [strlen(通讯)+ 1]));strcpy (s - >评论、通讯);自由(s);
这段代码创建了一个失去了阻止,因为结构包含指向字符串的指针是前处理字符串块处理,如下所示。18新利最新登入
链接
最后,它可以创建结构能够指向相同的结构,这种能力可以用来联系在一起整个字符串相同的记录在一个叫一个链表的结构。
typedef struct {char[21]名称;char城市[21];char国家[21];Addr *下;}Addr;Addr *第一;
编译器会让你这样做,它可以用一个小经验创建左所示的结构。18新利最新登入