1.用typedef声明一个短语代替冗长的struct成员声明

int main(void)
{ typedef struct Hores Hores;
struct Hores
{
int age;
int height;
char name[];
char father[];
char mother[];
}; Hores groups[];
}

2.成员之间的复制是按值传递的,并不是按引用传递

#include <stdio.h>
#include <string.h>
#include <stdarg.h> int main(void)
{ typedef struct Hores Hores;
struct Hores
{
int age;
int height;
char name[];
char father[];
char mother[];
}; Hores groups[]; strcpy(groups[].name, "charleed"); groups[] = groups[]; printf("%d\n", sizeof(groups)); printf("%s\n", groups[].name);
printf("%s\n", groups[].name);
strcpy(groups[].name, "alex");
printf("%s\n", groups[].name);
printf("%s\n", groups[].name); return ;
}

输出:

204

charleed

charleed

charleed

alex

3.访问结构成员有两种运算符:

一个是“点运算符”,点运算符的左操作数一般是一个左值(也可以不是左值,但值必须是一个结构类型,参考左值一文的示例.5,或《C语言核心技术》第5章:结构和联合的成员);

另一个是“箭头运算符”,箭头运算符的左操作数必须是一个指针;

4.结构指针访问成员属性语法

printf("The name is %s\n", (*phorse).name);

为什么不是

printf("The name is %s\n", (*phorse.name));

因为成员选择运算符(句点)的优先级高于取消引用指针运算符*。这个操作还有另一种方法,更容易理解。将上面的语句改写为:

printf("The name is %s\n", phorse->name);

5.结构成员必须都是完整类型,例如下面这个例子,如果成员是一个数组,而它不指定长度,就无法通过编译:

struct frame_1 {
char name[];
};

不过有一个例外,就是C99允许:如果结构包含多个成员,那么最后一个成员允许为不完整类型的:

struct frame_1 {
int index;
char name[];
}

以上声明是合法的;

6.结构的成员可以包含一个还没有经过声明的结构指针,这种未经显式声明的结构指针被归类为不完整类型:

struct frame_1 {
struct frame_2 *ptr_frame_2;
} item_1;

以上示例struct frame_2是一个未被声明的结构,它在这里被称为不完整类型;

最新文章

  1. Java生成 Word文档的并打印解决方案
  2. 1.配置EditPuls-编译和运行java程序
  3. bzoj1221: [HNOI2001] 软件开发
  4. 文件夹添加右键DOS快捷入口
  5. HDU 1907
  6. 简单的Goto运算演示程序
  7. HttpApplication事件执行顺序(转)
  8. Codeforces Round #309 (Div. 2) C
  9. yarn工作流程
  10. CNN中的卷积核及TensorFlow中卷积的各种实现
  11. 转换Json中的时间戳为标准时间格式
  12. webStorm恢复误删除文件或工程
  13. Android中在不同activity中进行自定义广播的解析
  14. Scrum冲刺阶段4
  15. cetus系列~ cetus+mha
  16. poj3349 散列表(hash)
  17. Windows Python+Eclipse环境配置
  18. 微信公众号关联(小游戏 小程序 跳转 盒子 wx.navigateToMiniProgram)
  19. Hadoop HBase概念学习系列之HBase表的一些设置(强烈推荐好好领悟)(十三)
  20. 在windows上搭建redis集群(redis-cluster)(转载)

热门文章

  1. .net core 学习 读取配置文件
  2. 两个对象值相同(x.equals(y)==true),但却可有不同的hashcode这句话对吗?
  3. 修改python3导致终端打不开
  4. Tensorflow Serving Docker compose 部署服务细节(Ubuntu)
  5. NRF5340首款双核处理器无线SoC
  6. IPV6-ONLY
  7. Spring boot 集成 阿里 Mqtt
  8. 【重温基础】16.JSON对象介绍
  9. 学习ES6笔记──工作中常用到的ES6语法
  10. JS基础知识点——原始类型和对象类型的区别