当前位置: 首页 > news >正文

网站二维码制作搭建软件

网站二维码制作,搭建软件,济南网站建设手机,wordpress5.2.1一、什么是自定义类型 C语言提供了丰富的内置类型#xff0c;常见的有int, char, float, double, 以及各种指针。 除此之外#xff0c;我们还能自己创建一些类型#xff0c;这些类型称为自定义类型#xff0c;如数组#xff0c;结构体#xff0c;枚举类型和联合体类型。 … 一、什么是自定义类型 C语言提供了丰富的内置类型常见的有int, char, float, double, 以及各种指针。 除此之外我们还能自己创建一些类型这些类型称为自定义类型如数组结构体枚举类型和联合体类型。 二、数组 把一组相同类型的元素放到一起就是数组。数组按照结构分为一维数组二维数组等等按照存储元素类型又可以分为整型数组浮点型数组等等。 2.1 定义 假设一个数组能存储5个元素每个元素是int类型的可以如下定义 int arr[5]; 上面是一个常见的一维数组。如果我们想定义一个二维数组呢比如一个3行5列的数组每个元素是char*类型应该如下定义 char* ch[3][5]; 2.2 初始化 对于一维数组可以用大括号把要初始化的数据括起来用来初始化这个数组。如 int arr[5] {1,2,3,4,5}; 对于上面这行代码可以这么用语言表述有一个一维数组数组名叫做arr数组存储了5个元素每个元素的类型是int在定义这个数组的同时我们对它进行了初始化使得它存储的元素分别是1~5。 以上写法非常基础还有一些进阶的写法。比如当数组定义的同时对其初始化可以省略元素个数。如 int arr[] {1,2,3,4,5}; 此时编译器会根据大括号里有5个元素来确定数组的元素个数是5。 如果我们只想初始化一部分元素呢 int arr[5] {1,2,3}; 数组一共有5个元素但我们只初始化了3个。当初始化的元素个数小于数组的元素个数时剩余的元素会被默认初始化成0。如以上的代码的意思是我们把数组的前3个元素初始化成123剩下的2个元素都初始化成0。这种初始化方式被称为不完全初始化。 思考如何创建一个数组数组名叫ch能存储10个元素存储的元素类型是char并把所有元素都初始化成\0ASCII码值是0 char ch[10] {0}; 以上是一维数组的初始化。如果是二维数组呢假设有一个三行五列的数组总共有15个数分别是 第一行12345 第二行678910 第三行1112131415 我们可以把每一行当成一个一维数组用大括号括起来并且在最外面再加上一个大括号。 int arr[3][5] {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}}; 对于二维数组如果能确定行数可以把行数省略。注意列数无论如何都不能省略 int arr[][5] {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}}; 以上代码中编译器会自动识别数组一共有3行。 如果确定数组元素的顺序内层的大括号可以省略。如 int arr[3][5] {1,2,3,4,5, 6,7,8,9,10, 11,12,13,14,15}; 以上代码效果是一样的。编译器会自动用12345初始化第一行678910初始化第二行依此类推。 如果是不完全初始化没有初始化的元素会被默认初始化成0。 int arr[3][5] {1,2,3,4,5, 6,7,8,9,10}; 以上代码中第三行会被默认初始化成0。 注意如果只定义不初始化并且数组是局部的在大括号内部则所有的元素都是随机值。 int arr[5]; 此时数组存储的是5个随机值。 2.3 访问 数组的元素是有下标的每个元素都对应一个下标。第一个元素的下标是0后面元素的下标依次递增。如假设一个一维数组有5个元素则元素的下标分别是0~4。数组的元素可以用下标访问。如 arr[3] 30; 就把数组arr中下标为3的元素改成了30。 对于二维数组每个元素有2个下标。行标和列标都是从0开始的。假设有一个3行5列的数组则第一行的行标为0第二行的行标为1第三行的行标为2。列标同理第一列到第五列的下标分别是0~4。每个元素都要写明白行标和列标如 arr[2][3] 100; 就表示把数组的行标为2列标为3的元素改成了100。 2.4 内存分布 对于一维数组随着下标的增长地址是连续的由低到高变化的 char ch[5]; for (int i 0; i 5; i) {printf(ch[%d] %p\n, i, ch[i]); } 打印出来的地址信息是 可以发现地址是连续增长的由于一个char类型的数据是1个字节相邻元素的地址也相差1个字节。 那二维数组呢 char ch[3][5]; for (int i 0; i 3; i) {for (int j 0; j 5; j){printf(ch[%d][%d] %p\n, i, j, ch[i][j]);} } 可以看到相同行中随着列标的增长地址是由低到高连续增长的。并且每一行的最后一个元素和下一行的第一个元素是无缝对接的。 三、结构体类型 3.1 定义 数组是把相同类型的元素放到一块去。如果是把不同的元素放到一块去呢比如说要想描述清楚一个学生我们需要知道他的姓名学号和成绩。姓名和学号是字符数组成绩是浮点型。我们就可以声明一个结构体类型 struct Stu {char name[20];char id[20];float score; }; 其中struct Stu是一种结构体类型name,id,score就是这个结构体类型创建出来的结构体变量的成员变量。 这样我们就可以定义一个结构体用来描述某个学生。 struct Stu s; 我们可以在声明的同时定义。如 struct Stu {char name[20];char id[20];float score; }s; 3.2 初始化 如果我们想在定义的同时对这个结构体初始化可以用大括号把初始化的数据括起来。 struct Stu s {Zhang San, 12345xyz, 95.0f}; 我们可以在声明的同时初始化 struct Stu {char name[20];char id[20];float score; }s {Zhang San, 12345xyz, 95.0f}; 3.3 访问 如何把张三的成绩改成59.5f呢我们可以使用结构成员访问操作符。具体使用方式是 结构体变量名.成员变量名 如 s.score 59.5f; 假设我们使用了一个指针ps来保存s的地址。 struct Stu* ps s; 那么访问时就需要先解引用。 (*ps).score 59.5f; 但这样写太麻烦了有一种写法和上面这种写法是等价的。 ps-score 59.5f; 这里的-就等价于先解引用再访问结构体成员变量。 3.4 内存分布 划重点结构体在内存中的存储需要遵循内存对齐规则。 先介绍几个概念 针对某一个地址ptr1我们定义另一个地址ptr2的偏移量为((int)ptr2-(int)ptr1)。简单来说某一个地址相对于另一个地址的偏移量就是把这两个地址当成整数后的差。 每个编译器会根据环境有一个默认对齐数。这个默认对齐数取决于编译器但我们是可以修改的。修改方法如下 #pragma pack(4) 就把默认对齐数设置成4。如果省略括号里的数就会重置默认对齐数为默认值。 #pragma pack() 内存对齐的规则如下 结构体变量的第一个成员变量存储在偏移量为0的地址处。注意此处的偏移量是针对某一个地址的偏移量对于同一个结构体变量我们讨论偏移量都是针对同一个地址的偏移量。 从第二个成员变量开始存储位置的偏移量是自身大小和默认对齐数的较小值的整数倍。我们把括号括起来的部分称之为这个成员变量的对齐数。把这个结构体变量的所有对齐数的最大值称之为这个结构体变量的最大对齐数。 结构体变量的总大小是这个结构体变量的最大对齐数的整数倍。 以上三点是针对没有嵌套结构体的情况也就是说结构体的成员变量中不存在结构体。对于嵌套的结构体的对齐数的计算也满足规则2结构体的总大小是所有对齐数包括嵌套结构体的对齐数的整数倍。 举个例子以下程序会输出多少 #include stdio.h#pragma pack(8) struct A {double d1;char c1;int i;double d2;char c2; }a; #pragma pack()int main() {printf(%d\n, sizeof(a));return 0; } 根据规则1d1的起始偏移量为0而d1的大小是8故d1的偏移量是0~7。 根据规则2c1的起始偏移量至少为8且是其对齐数的整数倍。c1的对齐数为min(sizeof(c1), 8)18是1的整数倍。又因为c1的大小是1故c1的偏移量是8。 根据规则2i的起始偏移量至少是9且是其对齐数的整数倍。i的对齐数为min(sizeof(i), 8)4。9不是4的整数倍同理1011都不是。故i的起始偏移量是12。又因为i的大小是4故i的偏移量是12~15。 根据规则2d2的起始偏移量至少是16且是其对齐数的整数倍。d2的对齐数为min(sizeof(d2), 8)8。16是8的倍数故d2的起始偏移量是16。又因为d2的大小是8故d2的偏移量是16~23。 根据规则2c2的起始偏移量至少是24且是其对齐数的整数倍。c2的对齐数为min(sizeof(c2), 8)1。24是1的倍数故c2的起始偏移量是24。又因为c2的大小是1故c2的偏移量是24。 根据规则3a的总大小至少是25偏移量0~24且是其最大对齐数的整数倍。最大对齐数是以上算出来的对齐数的最大值即8。而25不是8的倍数。比25大的整数中最小的8的倍数是32故a的总大小是32个字节。 对于有嵌套结构体的情况同理。朋友们可以自行验证。 四、枚举类型 4.1 定义 枚举即一一列举。比如三原色就是红绿蓝。我们就声明一个枚举类型。 enum Color {RED,GREEN,BLUE }; 从而定义枚举变量。 enum Color c; 和结构体类似也可以在声明时定义。 enum Color {RED,GREEN,BLUE }c; 4.2 初始化 可以使用枚举常量来初始化枚举变量。如 enum Color c GREEN; 注意枚举常量默认从0开始从上到下依次递增。如对于enum Color类型RED的值是0GREEN的值是1BLUE的值是2。 五、联合体类型 5.1 定义 联合体类型的成员变量公用同一块空间并且遵守内存对齐规则。如 union U {int i;char c; }; 这个类型大小是4个字节其中i占满全部的4个字节而c只占第一个字节它们共用同一块空间所以联合体又叫做共用体。 5.2 访问 访问方式和结构体类似。如 union U u; u.i 10;
http://www.dnsts.com.cn/news/245353.html

相关文章:

  • 可以悬赏做任务的叫什么网站珠海建设网站公司哪家好
  • 杭州滨江的网站建设公司财税公司做网站
  • 上海建设部网站外贸soho建网站
  • 网站权限设计myeclipse怎样做网站
  • dedecms 网站安装网站开发最好的语言
  • 苏州网站建设熊掌号wordpress网址转跳页面插件
  • 网站网页制作机构跨境电商怎么样
  • preec网站广告设计公司策划书
  • 淘宝客网站女装模板下载做产品网站建设
  • 商城网站 价格公众号注册流程
  • 网站 备案 注销 影响有哪些图片设计网站有哪些问题
  • 专门做电商的招聘网站h5建设网站教程
  • 网站免费建站owordpress代码高亮主题
  • asp医院网站源码ai网站设计
  • 中国seo第一人seo人才
  • 山东住房和城乡建设部网站wordpress带会员vip主题
  • 中国建设教育协会是个什么网站北京快三
  • 电影网站怎么做流量北京seo排名技术
  • 找百度公司做网站怎么样外贸汽车网站制作
  • 衡阳网站网站建设小程序推广渠道
  • 网站开发可行性分析网站分销系统
  • 数据网站怎么做免费的产品图片网站
  • 成都网站推广外包墨刀可以做网站原型图吗
  • 网站链接提交dedecms 网站地图生成
  • 仪征做网站公司哪家好安徽建设网站公司
  • 河北建设银行招聘网站网站开发价位评估
  • 网站开发过程记录册牡丹江百姓信息网
  • 广州机械网站建设外包内丘网站建设
  • 博客网站做外贸可以吗怎么用ip做网站
  • 深圳市龙岗区住房和建设局网站ps图做ppt模板下载网站