C语言 数组、字符数组、字符串-c语言数组.md
数组的概念和定义一组数据的集合称为数组(Array),它所包含的每一个数据叫做数组元素(Element),所包含的数据的个数称为数组长度(Length)。
数组的定义格式为1type arrayName[length]
type 为数据类型,arrayName 为数组名,length 为数组长度。 需要注意的是:
数组长度 length 最好是常量表达式,例如 10、20_4 等,这样在所有编译器下都能运行通过;如果 length 中包含了变量,例如 n、4_m 等,在某些编译器下就会报错。
数组是一个整体,它的内存是连续的;也就是说,数组元素之间是相互挨着的,彼此之间没有一点点缝隙。
一般情况下,数组名会转换为数组的地址,需要使用地址的地方,直接使用数组名即可。
访问数组元素的格式为:1arrayName[index]
index 为数组下标。注意 index 的值必须大于等于零,并且小于数组长度,否则会发生数组越界。
数组的内存结构数组在内存中是连续存储的内存空间,空间地址是连续的,并且每个数组元素所占内存大小一致。
字符数组和字符串字符数组即字符的数组:
1234char a ...
C语言 数组、字符数组、字符串-c语言数组.md
数组的概念和定义一组数据的集合称为数组(Array),它所包含的每一个数据叫做数组元素(Element),所包含的数据的个数称为数组长度(Length)。
数组的定义格式为1type arrayName[length]
type 为数据类型,arrayName 为数组名,length 为数组长度。 需要注意的是:
数组长度 length 最好是常量表达式,例如 10、20_4 等,这样在所有编译器下都能运行通过;如果 length 中包含了变量,例如 n、4_m 等,在某些编译器下就会报错。
数组是一个整体,它的内存是连续的;也就是说,数组元素之间是相互挨着的,彼此之间没有一点点缝隙。
一般情况下,数组名会转换为数组的地址,需要使用地址的地方,直接使用数组名即可。
访问数组元素的格式为:1arrayName[index]
index 为数组下标。注意 index 的值必须大于等于零,并且小于数组长度,否则会发生数组越界。
数组的内存结构数组在内存中是连续存储的内存空间,空间地址是连续的,并且每个数组元素所占内存大小一致。
字符数组和字符串字符数组即字符的数组:
1234char a ...
C语言 输入字符串scanf()与gets()区别-c语言输入字符串scanf与gets.md
输入字符串可以使用 scanf() 这个通用的输入函数,对应的格式控制符为%s,gets() 这个专用的字符串输入函数,它拥有一个 scanf() 不具备的特性。
gets() 是有缓冲区的,每次按下回车键,就代表当前输入结束了,gets() 开始从缓冲区中读取内容,这一点和 scanf() 是一样的。gets() 和 scanf() 的主要区别是:
scanf() 读取字符串时以空格为分隔,遇到空格就认为当前字符串结束了,所以无法读取含有空格的字符串。
gets() 认为空格也是字符串的一部分,只有遇到回车键时才认为字符串输入结束,所以,不管输入了多少个空格,只要不按下回车键,对 gets() 来说就是一个完整的字符串。
也就是说,gets() 能读取含有空格的字符串,而 scanf() 不能。
C语言 输入字符串scanf()与gets()区别-c语言输入字符串scanf与gets.md
输入字符串可以使用 scanf() 这个通用的输入函数,对应的格式控制符为%s,gets() 这个专用的字符串输入函数,它拥有一个 scanf() 不具备的特性。
gets() 是有缓冲区的,每次按下回车键,就代表当前输入结束了,gets() 开始从缓冲区中读取内容,这一点和 scanf() 是一样的。gets() 和 scanf() 的主要区别是:
scanf() 读取字符串时以空格为分隔,遇到空格就认为当前字符串结束了,所以无法读取含有空格的字符串。
gets() 认为空格也是字符串的一部分,只有遇到回车键时才认为字符串输入结束,所以,不管输入了多少个空格,只要不按下回车键,对 gets() 来说就是一个完整的字符串。
也就是说,gets() 能读取含有空格的字符串,而 scanf() 不能。
C语言 内存基础
http://c.biancheng.net/
程序的运行
详细了解请自行学习《计算机组成原理》《汇编语言》。
寄存器(Register)是CPU内部非常小、非常快速的存储部件,它的容量很有限,对于32位的CPU,每个寄存器一般能存储32位(4个字节)的数据,对于64位的CPU,每个寄存器一般能存储64位(8个字节)的数据。为了完成各种复杂的功能,现代CPU都内置了几十个甚至上百个的寄存器,嵌入式系统功能单一,寄存器数量较少。
虚拟地址我们在C语言中会使用&取址符来获取地址,该地址并不是真的,大致如下图所示:
虚拟地址的整个想法是这样的:把程序给出的地址看做是一种虚拟地址(Virtual Address),然后通过某些映射的方法,将这个虚拟地址转换成实际的物理地址。这样,只要我们能够妥善地控制这个虚拟地址到物理地址的映射过程,就可以保证程序每次运行时都可以使用相同的地址。
除了在编程时可以使用固定的内存地址,给程序员带来方便外,使用虚拟地址还能够使不同程序的地址空间相互隔离,提高内存使用效率。
使不同程序的地址空间相互隔离如果所有程序都直接使用物理内存,那么程序所使用 ...
C语言 内存基础
http://c.biancheng.net/
程序的运行
详细了解请自行学习《计算机组成原理》《汇编语言》。
寄存器(Register)是CPU内部非常小、非常快速的存储部件,它的容量很有限,对于32位的CPU,每个寄存器一般能存储32位(4个字节)的数据,对于64位的CPU,每个寄存器一般能存储64位(8个字节)的数据。为了完成各种复杂的功能,现代CPU都内置了几十个甚至上百个的寄存器,嵌入式系统功能单一,寄存器数量较少。
虚拟地址我们在C语言中会使用&取址符来获取地址,该地址并不是真的,大致如下图所示:
虚拟地址的整个想法是这样的:把程序给出的地址看做是一种虚拟地址(Virtual Address),然后通过某些映射的方法,将这个虚拟地址转换成实际的物理地址。这样,只要我们能够妥善地控制这个虚拟地址到物理地址的映射过程,就可以保证程序每次运行时都可以使用相同的地址。
除了在编程时可以使用固定的内存地址,给程序员带来方便外,使用虚拟地址还能够使不同程序的地址空间相互隔离,提高内存使用效率。
使不同程序的地址空间相互隔离如果所有程序都直接使用物理内存,那么程序所使用 ...
C语言 枚举类型(enum用法)-c语言枚举类型enum用法.md
在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等。我们在
枚举类型的定义形式为:
1enum typeName{ valueName1, valueName2, valueName3, ...... };
enum是一个新的关键字,专门用来定义枚举类型,这也是它在C语言中的唯一用途;typeName是枚举类型的名字;valueName1, valueName2, valueName3, ……是每个值对应的名字的列表。注意最后的;不能少。
例如,列出一个星期有几天:
1enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun };
可以看到,我们仅仅给出了名字,却没有给出名字对应的值,这是因为枚举值默认从 0 开始,往后逐个加 1(递增);也就是说,week 中的 Mon、Tues …… Sun 对应的值分别为 0、1 …… 6。
我们也可以给每个名字都指定一个值:
1enum ...
C语言 枚举类型(enum用法)-c语言枚举类型enum用法.md
在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等。我们在
枚举类型的定义形式为:
1enum typeName{ valueName1, valueName2, valueName3, ...... };
enum是一个新的关键字,专门用来定义枚举类型,这也是它在C语言中的唯一用途;typeName是枚举类型的名字;valueName1, valueName2, valueName3, ……是每个值对应的名字的列表。注意最后的;不能少。
例如,列出一个星期有几天:
1enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun };
可以看到,我们仅仅给出了名字,却没有给出名字对应的值,这是因为枚举值默认从 0 开始,往后逐个加 1(递增);也就是说,week 中的 Mon、Tues …… Sun 对应的值分别为 0、1 …… 6。
我们也可以给每个名字都指定一个值:
1enum ...
C语言 结构体
C语言结构体(Struct)从本质上讲是一种自定义的数据类型,只不过这种数据类型比较复杂,是由 int、char、float 等基本类型组成的。
结构体(Struct)123struct 结构体名{ 结构体所包含的变量或数组};
结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。
1234567struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在学习小组 float score; //成绩};
像 int、float、char 等是由C语言本身提供的数据类型,不能再进行分拆,我们称之为基本数据类型;而结构体可以包含多个基本类型的数据,也可以包含其他的结构体,我们将它称为复杂数据类型或构造数据类型。
结构体变量1struct stu stu1, stu2;
定义了两个变量 stu1 和 stu2,它们都是 stu 类型 ...
C语言 结构体
C语言结构体(Struct)从本质上讲是一种自定义的数据类型,只不过这种数据类型比较复杂,是由 int、char、float 等基本类型组成的。
结构体(Struct)123struct 结构体名{ 结构体所包含的变量或数组};
结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。
1234567struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在学习小组 float score; //成绩};
像 int、float、char 等是由C语言本身提供的数据类型,不能再进行分拆,我们称之为基本数据类型;而结构体可以包含多个基本类型的数据,也可以包含其他的结构体,我们将它称为复杂数据类型或构造数据类型。
结构体变量1struct stu stu1, stu2;
定义了两个变量 stu1 和 stu2,它们都是 stu 类型 ...