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

soho建设外贸网站网站seo网络优化

soho建设外贸网站,网站seo网络优化,门店零售管理系统,王也诸葛青车文一、什么是自定义类型 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.w-s-a.com/news/649163/

相关文章:

  • 网站显示500错误怎么解决方法店面设计模板
  • 网站备案icp文化传媒有限公司
  • 北京企业建站模板微信公众号商城怎么制作
  • 制作网站 公司简介大型做网站的公司
  • 北京网站开发建设南昌网站小程序开发
  • 网站如何做ip签名图片宁波互联网
  • 中山小榄网站建设长沙网络营销品牌排名
  • 推广优化厂商联系方式网站推广教程优化整站
  • 为外国企业做中文网站建设网站建设单位哪家好
  • 生物制药公司网站模板有没有专业做steam创客的网站
  • 福田做棋牌网站建设找哪家效益快弄一个微信小程序多少钱
  • 成都哪家做网站建设比较好做推广赚钱的网站
  • 常州专门做网站的公司有哪些网页模板下载网站10
  • linx服务器怎么做网站做长页网站
  • 汕头网站建设sagevis服装设计公司有什么职位
  • 网站流量分析报告医院网站制作公司
  • 仿58网站怎么做邯郸网站设计多少钱
  • 广州网站制作开发wordpress中文固定连接
  • 成都网站建设公司盈利吗专门做二手手机的网站有哪些
  • 手机网站设计需要学什么wordpress读法
  • WordPress pajx天津短视频seo
  • 检察院门户网站建设情况总结深圳网站制作长沙
  • 单页导航网站模板搜索量查询
  • 如何在一个地方建设网站营销型定制网站
  • 保定网站建设方案维护动易网站中添加邮箱
  • 简易网站的html代码wordpress音乐html
  • 四川住房和城乡建设厅网站打不开海山网站建设
  • 深圳设计功能网站如何用html制作网站
  • 网络优化软件下载竞价排名和seo的区别
  • 龙华新区做网站中高端网站建设