C 语言并没有显式的字符串数据类型,因为字符串以字符串常量的形式出现或者存储于字符数组中。
字符串常量适合那些不会对它们进行修改的字符串。所有的字符串都必须存储于字符数组或者动态分配的内存中。字符串就是一串0个或多个字符,并且以一个位模式全是0的NUL字节结尾。字符串的长度不包括 nul 字节。
头文件 string.h 包含了使用字符串函数

结构

数组可以通过下标访问,以为数组的元素长度相同。
结构通过成员名字访问,不能用下标访问。因为它的成员长度不一致。相同类型的结构变量互相之间尅赋值。
声明结构:struct tag {member-list;
} variable-list;struct {int a;char b;float c;
} x;struct {int a;char b;float c;
} y[20], *z;  // 这是2个不同的结构类型, z = &x 错的所以 ,tag 就派上用处了: // tag 结构标签
struct tag { int a;char b;float c;
};struct tag x;
struct tag y[20],*z;
z = &x; //对另外一个技巧是用 typedef :
typedef struct {int a;char b;float c;
} Simple; //Simple 是个类型名而不是结构标签Simple x;  // 用类型名来声明
Simple y[20],*z;
结构成员:
struct COMPLEX {float f;struct SIMPLE s;struct SIMPLE sa[10];
};一个结构的成员名字可以和其他结构的成员的名字相同。结构成员的直接访问:
结构变量的成员是通过点操作符(.)访问的。
struct COMPLEX comp;
comp.a 结构成员的间接访问:
拥有一个指向结构的指针,先对指针进行间接访问,获得这个结构。再使用.操作符。
要加括号,因为间接优先级没有.操作符高。
void func(struct COMPLEX *cp);
(*cp).f由于这个概念不好,C 提供了箭头操作符(->),左操作数必须是指向结构的指针,
箭头操作符对左操作数执行间接访问取得指针所指向的结构,然后和.操作符一样,根据右操作符选择一个指定的结构成员。但是间接访问操作符内建于箭头操作符内。结构的自引用: (必须是 结构标签 + 指针)
struct tag{int a;struct tag b;
}; //这种自引用是非法的,因为成员 b 是另外一个完整的结构,其内部还将包含它自己的成员b,无限重复下去。struct tag{int a;struct tag *b;
}; // 这个是对的。b 是指针,而非结构。编译器在结构的长度确定之前就已经知道指针的长度了。
所以是合法的。如果你觉得结构内部包含一个指向结构本身的指针有些奇怪,请记住它事实上所
指向的是同一种类型的不同结构。更加高级的数据结构,如链表和树,都是用这种技巧实现的。
每个结构指向链表的下一个元素或者数的下一个分支。//下面是错误的
typedef struct {int a;SELF_REF3 *b;int c;
} SELF_REF3;
这个声明的目的是为这个结构创建类型名为 SELF_REF3.但是失败了。类型名直到声明的末尾才定义,
所以在结构声明的内部它尚未定义。//解决方案是定义一个结构标签来声明 b
typedef struct SELF_REF3_TAG{int a;struct SELF_REF3_TAG *b;int c;
} SELF_REF3;
不完整声明:
struct B;
struct A{struct B *pb;
};
struct B{struct A *pa;
};
在 A 的成员列表中需要标签 B 的不完整声明。一旦A被声明之后,B的成员列表也可以别声明。
结构的初始化:
struct INTT_EX {int a;short b[10];Simple c;
} x = {10,{1,2,3,4,5},{25,'x',1.9}
};
位段:
位段的声明和结构相似,但它的成员是一个或多个位的字段。
这些不同长度的字段实际上存储于一个或多个整形变量之中。
位段的声明和普通的结构成员声明相同,但有2个例外。首先,位段成员必须声明为
int,signed int 或者 unsigned int 类型。其次,在成员的后面是一个冒号和一个整数。
这个整数指定该位段所占用的位的数目。struct CHAR{unsigned ch : 7;unsigned font : 6;unsigned size : 19;
};
struct CHAR ch1;

联合

联合的所有成员引用的是内存中相同的位置。
union {float f;int i;
} fi;联合的初始化: // 联合变量可以被初始化,但初始值必须是联合的第一个成员的类型
union {int a;float b;char c[4];
} x = {5};

13.字符串,结构,联合相关推荐

  1. 数据结构与算法:13 字符串与整数集合

    13 字符串与整数集合 知识点: 1. 字符串 我们古人没有电影电视,没有游戏网络,所以文人们就会想出一些文字游戏来娱乐.比如宋代的李禺写了这样一首诗:"枯眼望遥山隔水,往来曾见几心知?壶空 ...

  2. python正则表达式中的r与转义字符_左手用R右手Python系列13——字符串处理与正则表达式...

    原标题:左手用R右手Python系列13--字符串处理与正则表达式 杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化.个 ...

  3. 7.13软件(结构)设计说明(SDD)

    7.13软件(结构)设计说明(SDD) 说明: 1.<软件(结构)设计说明>(SDD)描述了计算机软件配置项(CSCI 的设计.它描述了 CSCI 级设计决策.CSCI体系结构设计(概要设 ...

  4. error C2227: “-QueryInterface”的左侧必须指向类/结构/联合

    问题:ado编程 编译时发现QueryInterface"的左边必须指向类/结构/联合/泛型类型 错误: e:\Program Files\Microsoft Visual Studio . ...

  5. C语言结构联合位字段知识体系总结大学霸IT达人

    C语言结构联合位字段知识体系总结大学霸IT达人 C语言的基础类型中只能去定义单一类型的变量用于指代数据,但在现实生活中我们常常要处理的数据却会包含多种类型的数据. 例如,公司员工的信息管理,每个员工的 ...

  6. 基础C语言知识串串香10☞数组字符串结构体联合体枚举

    五.数组&字符串&结构体&联合体&枚举 5.1.c语言中定义一个字符串:char a[6]={'l','i','n','u','x','\0'};'\0'的字符编码为0 ...

  7. Qt错误 error: C2228: “.exec”的左边必须有类/结构/联合 的解决方法

    开发环境:Qt 5.6.1 (MSVC 2013, 32 bit) 我写了如下代码: GetUserFaceDialog dialog(); dialog.exec(); GetUserFaceDia ...

  8. Qt 编译错误:C2228: “.key”的左边必须有类/结构/联合

    目录 一.产生原因 二.解决方案 方案1:静态函数访问静态变量 方案2:静态函数内定义对象,再访问变量 一.产生原因 原因:静态函数访问了非静态变量, static函数与非static变量混用,示例代 ...

  9. C2228 “.xxx”的左边必须有类/结构/联合 c++

    c++编译报错: C2228    "aaa.xxx"的左边必须有类/结构/联合 我发现的原因:指针函数用错 aaa是个指针,正确的用法: aaa->xxx 网友1的原因:初 ...

  10. 错误 1 error C2037: “age”的左侧部分指定未定义的结构/联合“stu”

    今天在使用冒泡函数对结构体类型数据进行排序时,遇到了如下报警,查了半天没找到代码有任何bug或者逻辑错误:却在运行时弹出如下错误: error C2037: "age"的左侧部分指 ...

最新文章

  1. python htmlparser使用问题小结
  2. vue下使用 mint-ui,修改主题样式为微信UI的绿色风格
  3. java 线程同步的方法_Java多线程同步方法
  4. 台安变频器n2按键说明_台安N2变频器说明书.pdf
  5. linux文件分割(将大的日志文件分割成小的)
  6. 2017.9.6 外星人 思考记录
  7. Apache Arrow 内存数据
  8. Linux中重定向的实验总结,Linux中重定向命令行的总结
  9. Spring帖子汇总
  10. 着力财富管理市场产品全覆盖 基金公司争设销售子公司
  11. 马尔科夫决策过程(MDP) : GridWord(DP)
  12. 电大本科免考英语和计算机,网络教育本科英语和计算机统考免考条件是什么?...
  13. Window平台编译log4cpp使用方法记录 (二)
  14. 人人开源搭建后台管理系统
  15. ddos源码 ntp_了解NTP DDOS攻击原理
  16. 基于32feet.net对Broadcom(Widcomm) stack蓝牙(Bluetooth)设备开发Windows Mobile与PC程序
  17. rosbag库的安装
  18. 软件测试之——性能测试(超级详细)这些你都知道吗?
  19. 使用CNN预测基因可及性
  20. 云笔记使用的感受想法!(对有道云笔记、印象云笔记的比较与评价)

热门文章

  1. 细说GIT分布式版本控制器
  2. android中include标签使用详解
  3. 是否,是否,总是富肥穷瘦?(文末上周投票公布)
  4. 开发基于GUI的R包(1)
  5. 4.3 调度核心组件
  6. 安装bootcamp时提示“找不到$winpedriver$文件夹,请验证该文件夹是否和bootcamp处于同一文件夹内?”...
  7. elasticsearch pinyin 拼音分词器
  8. (转载)make的-j命令(加速Linux程序编译)
  9. NOIP模拟题——tractor
  10. 屏幕触摸事件监听,判断上下左右的操作行为,判断方法缩小的操作行为