日期: 2022-09-21 04:27:21 浏览数:6

上往建站提供服务器空间服务商,百度快照排名,网站托管,百度推广运营,致力于设计外包服务与源代码定制开发,360推广,搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。
梨树做网站/制作网站/搭建网站/设计网站/开发网站-网站服务一站式

运行结果如下:
LILiFunZhangZhangFunLiFunZhangLi Li: 3Zhang: 3 Fun: 3
一个结构体变量的指针就是该变量所占据的内存段的起始地址,可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组中的元素。
指向结构体变量的指针的应用:
在主函数中声明了 struct student 类型,然后定义了一个 struct student 类型的变量,stu_1 同时又定义一个指针变量 p ,它指向一个 struct student 类型的数据,在函数的执行部分将结构体变量 stu_1 的起始地址赋给指针变量 p ,也就是使 p 指向 stu_1 然后对 stu_1 的各成员赋值,第二个 printf 函数也是用来输出 stu_1 各成员的值,但使用的是 (*p).num 这样的形式, (*p) 表示 p 指向的结构体变量,(*p).num 是 p 指向的结构体变量中的成员 num 。注意 *p 两侧的括弧不可省略,因为成员运算符 '.' 优先于 '*' 运算符,*p.num 就等价于 *(p.num)
运行结果如下:
NO. :89101name: Li Linsex:M score:89.500000NO. :89101name: Li Linsex:M score:89.500000
可以看到两个 printf 输出的结果相同。
在C语言中,为了使用方便和使之直观,可以把 (*p).num 改用 p->num 来代替,它表示 *p 所指向的结构体变量中的 num 成员,同样,(*p).name 等价于 p->name。
也就是说以下三种形式等价:
a. 结构体变量.成员名
b. (*p).成员名
c. p-> 成员名
上面的最后一个 printf 函数输了项可以改写为:
printf("NO. :%ld
name: %s
sex:%c
score:%f
",p->num, p->name, p-上面的最后一个 printf 函数输了项可以改写为:
printf("NO. :%ld name: %s sex:%c score:%f ",p->num, p->name, p->sex, p->score);
其中 -> 称为指向运算符。
分析以下几种运算符:
p -> n 得到 p 指向的结构体变量中的成员 n 的值
p -> n ++ 得到 p 指向的结构体变量中的成员 n 的值,用完值后使它加 1
++p -> n 得到 p 指向的结构体变量中的成员 n 的值使之加 1 (先加)
6.2 指向结构体数组的指针
以前介绍过可以使用指向数组或数组元素的指针和指针变量,同样,对结构体数组及其元素也可以用指针变量来指向。
指向结构体数组的指针的应用。
实例
#include <stdio.h>
#inlcude <stdlib.h>
struct student
{
int num;
char name[20];
char sex;
int age;
};
struct student stu[3] = {{10101, "Li Lin", 'M', 18},
{10102, "Zhang Fun", 'M', 19},
{10103, "Wang Min", 'F', 20}};
int main()
{
struct student *p;
printf("No. name sex age ");
for(p=stu; p<stu+3;p++)
printf("%5d %-20s %2c %4d ", p->num, p->name, p->sex, p->age);
system("pause");
}
运行结果如下:
No. name sex age
10101 Li Lin M 18
10102 Zhang Fun M 19
10103 Wang Min F 20
注意以下两点:
(
1)如果 p 的初值为 stu,即指向第一个元素,则 p + 1 后指向下一个元素的起始地址。例如:
(++p) -> num 先使 p 自加 1 ,然后得到它指向的元素中的 num 成员的值(即10102)。
(p++) ->num 先得到 p->num 的值(即10101),然后使 p 自加 1 ,指向 stu[1]。
注意以上二者的不同。
(2)程序已定义了指针 p 为指向 struct student 类型数据的变量,它只能指向一个 struct student 型的数据(p 的值是 stu 数组的一个元素的起始地址),而不能指向 stu 数组元素中的某一成员,(即 p 的地
梨树做网站/制作网站/搭建网站/设计网站/开发网站-网站服务一站式
上往建站提供搭建网站,域名注册,官网备案服务,网店详情页设计,企业网店,专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管,网页美工排版,致力于域名申请,竞价托管,软文推广,全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机,网站推广,百度竞价托管,网站建设,上网建站推广服务,网络公司有哪些等业务,专业团队服务,效果好。
服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)