C语言中使用结构体成员指向符号使用疑惑“->”和"."
来源:互联网 发布:阿里云dns 地址 编辑:程序博客网 时间:2024/06/06 20:10
今天学习使用gettimeofday,gmtime,localtime等函数在Linux下进行编程,刚开始很疑惑为什么例程代码中,有时候用“->”表示结构体成员变量,有时候又用".".如下图代码所示:(time1.c)
以上的第10行代码和第13行代码,使用"."来指示结构体成员,编译结果报错如下:
而当把"这两行代码中的”.”"改成"->"时,编译成功且程序正常运行,如下图所示:
而在另一个代码,使用了“->”来指示结构体成员变量(第11行:timeval2->tv_sec)(time3.c)
编译报错如下:
相反地,将"->"改为"."则编译成功且正常运行了。
反复琢磨和查找资料,发现问题出在结构体指针和结构体上面。
在C语言中,结构体变量成员的表示方法为:
结构体变量.成员名
而结构体指针变量用于指向一个结构体变量,该指针变量本身存放的是结构体变量的首地址,区别于结构体变量。
使用结构体指针变量表示其成员变量的方法有两种:1.(*结构指针变量).成员变量名;2.结构指针变量->成员变量名。
就目前来看,“->”仅用在此种情况下。而我开始对两个程序的琢磨也忽略了结构体变量声明时到底是指针还是实体。
所以在第一个程序中,由于定义的local为结构指针变量:struct tm *local,所以既可以使用local->tm_hour,也可以使用(*local).tm_hour来表示tm_hour这个成员变量。
而在第二个程序中,由于定义的timeval2直接为结构体,则只能使用timeval2.tv_sec的方式来表示其中的成员变量tv_sec.
所以正确的两个程序如下所示:(time1.c)
time3.c
到此结束,仅作个自我总结和参考。:)
- C语言中使用结构体成员指向符号使用疑惑“->”和"."
- C语言中结构体中符号“->”和"."的使用疑惑
- C 语言中结构体引用符号"."和"->"的区别
- c语言:通过指向结构体变量的指针变量输出结构体变量中成员的信息
- C语言 结构体成员定义及使用问题
- C/C++语言宏中使用参数做结构体成员
- C语言技巧--在结构体中使用函数例子(定义一个指向函数的指针)
- C语言中关于return 语句使用的疑惑
- C语言中static关键词使用在函数外部和内部的疑惑
- c语言中结构体成员访问
- c语言中结构体的使用
- Struct 结构体疑惑(c语言)
- C语言结构体学习疑惑
- c语言中静态成员的使用
- 关于类和结构体中静态成员的使用
- 【C语言】使用结构体
- 【C语言】关于宏定义中#和##符号的使用和宏定义展开问题
- 【C语言】关于宏定义中#和##符号的使用和宏定义展开问题
- kernel learning for extrinsic classification of manifold features+CVPR13
- java学习之clone
- 解释结构模型ISM-2-5
- XMPP协议相关
- POJ2431 二叉堆(优先队列)以及贪心算法
- C语言中使用结构体成员指向符号使用疑惑“->”和"."
- nginx基础配置
- UVa:10603 Fill
- 步伐快一点,时光慢一些
- 十进制转化十六进制
- 查看Oracle_表名、字段名、注释、进程及杀进程等常用语句(转别人的)
- 纠结中选择
- Oracle导单个表的数据
- poj 1655 Balancing Act(求树的重心)