上一页 下一个

C语言编程基础

指向结构的指针

在C中几乎可以创建指向任何类型的指针,包括用户定义的类型。创建指向结构的指针是非常常见的。一个例子如下所示:18新利最新登入

类型定义结构{字符名称[21];char城市[21];char国家[3];}矩形;typedef Rec *RecPointer;RecPointer r;r = (RecPointer)malloc(sizeof(Rec));

指针r是一个指向结构的指针。请注意,r是一个指针,因此像任何其他指针一样占用四个字节的内存。18新利最新登入但是,malloc语句从堆中分配了45个字节的内存。* r结构和其他类型的结构一样吗矩形.下面的代码展示了指针变量的典型用法:18新利最新登入

广告

strcpy ((* r) . name, "利");strcpy ((* r)。城市,“罗利”);strcpy ((* r)。状态,“数控”);printf (" % s \ n ", (* r) .city);自由(r);

处理*r就像处理普通的结构变量一样,但是必须注意c语言中操作符的优先级。如果去掉*r周围的圆括号,代码将无法编译,因为"."操作符的优先级高于"*"操作符。因为在使用指向结构体的指针时,键入如此多的圆括号非常乏味,所以C语言包含了一种简写符号,可以做完全相同的事情:

strcpy (r - >名称,“利”);

r - >符号完全等价于(* r)。,但可以少用两个字符。

指向数组的指针

也可以创建指向数组的指针,如下所示:18新利最新登入

int * p;int我;P = (int *)malloc(sizeof(int[10]));(我= 0;我< 10;I ++) p[I] = 0;自由(p);

或者:

int * p;int我;P = (int *)malloc(sizeof(int[10]));(我= 0;我< 10;i++) *(p+ I) = 0;自由(p);

注意,在创建指向整数数组的指针时,只需创建一个指向int的普通指针。malloc调用分配一个任意大小的数组,指针指向该数组的第一个元素。你可以使用普通的数组索引对p所指向的数组进行索引,也可以使用指针算术。C认为这两种形式是等价的。

这种特殊的技术在处理字符串时非常有用。它允许您分配足够的存储空间来保存特定大小的字符串。

指针数组

有时,通过声明一个指针数组可以节省大量空间,或解决某些内存密集型问题。在下面的示例代码中,声明了一个包含10个指向结构的指针的数组,而不是声明一个结构数组。如果创建了一个结构数组,则该数组将需要243 * 10 = 2430字节。使用指针数组允许数组占用最小的空间,直到使用malloc语句分配实际记录为止。下面的代码简单地分配一条记录,在其中放置一个值,并处理该记录来演示这个过程:

Typedef struct {char s1[81];char s2 [81];s3 char [81];}矩形;Rec * [10];a[0] = (Rec *)malloc(sizeof(Rec));strcpy ([0] - > s1,“你好”);自由([0]);

包含指针的结构

结构体可以包含指针,如下所示:18新利最新登入

类型定义结构{字符名称[21];char城市[21];char电话[21];char *评论;} Addr;Addr年代;char通讯[100];得到(s.name 20);(s。城市,20); gets(s.phone, 20); gets(comm, 100); s.comment = (char *)malloc(sizeof(char[strlen(comm)+1])); strcpy(s.comment, comm);

当只有一些记录在注释字段中实际包含注释时,这种技术非常有用。如果对该记录没有注释,则注释字段将仅由一个指针(4字节)组成。然后,那些具有注释的记录根据用户键入的字符串长度,分配足够的空间来保存注释字符串。

特色
Baidu