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

男女做爰视频网站在线视频上海网络推广招聘

男女做爰视频网站在线视频,上海网络推广招聘,良品铺子vi设计手册,金华网站建设公司参考: 里科《C和指针》 结构的声明 struct {int a;char b; } x; struct {int a;char b; } y[20], *z;// 会报错,因为z和x虽然都没有名字,但是并不是一个东西 z &x;struct SIMPLE {int a;char b; }; // 这样就对了,因为名字匹…

参考: 里科《C和指针》


结构的声明

struct {int a;char b;
} x;
struct {int a;char b;
} y[20], *z;// 会报错,因为z和x虽然都没有名字,但是并不是一个东西
z = &x;struct SIMPLE {int a;char b;
};
// 这样就对了,因为名字匹配
struct SIMPLE x;
struct SIMPLE* z = &x;// 这样写也ok. 此时SIMPLE是类型名,而非结构体标签,因此可以直接用
typedef struct {int a;char b;
} SIMPLE;
SIMPLE x;
SIMPLE* z = &x;

结构体不能自引用(不能包含同结构成员),但可以包含指向同结构的指针。

struct SELF_REF1 {int a;struct SELF_REF1 b;
}; // 这个会报错,因为SELF_REF1的定义永远在递归,永远没有完成struct SELF_REF2 {int a;struct SELF_REF2 *b; 
}; // 这个是正确的,因为b的长度确定typedef struct {int a;SELF_REF3 *b;
} SELF_REF3; // 这个会报错,因为定义b时还没有SELF_REF3typedef struct SELF_REF3_TAG {int a;struct SELF_REF3_TAG *b;
} SELF_REF3; // 这样是正确的

如果两个结构需要互相依赖(比如一个结构需要包含另一个结构的几个成员),那么至少要有一个结构必须在另一个结构中以指针的形式存在。此时使用不完整声明incomplete declaration。

// 先不完整声明B
struct B;struct A {struct B *partner;...
};struct B {struct A *partner;...
};

结构的初始化

类似数组,用嵌套的大括号。如果初始列表的值不够,剩余的会采用缺省值。

struct INIT_EX {int a;short b[10];Simple c;
} x = {10,{1, 2, 3},{4, 'x'}
};

结构成员的访问

结构成员的直接访问用 . ,间接访问(通过指向结构的指针访问成员)使用 → 。

→的优先级高于&和*

typedef struct {int a;short b[2];
} Ex2;
typedef struct EX {int a;char b[3];Ex2 c;struct Ex *d;
} Ex;
// 此时指针d是NULL
Ex x = { 10, "Hi", { 5, {-1, 25} }, 0 };
Ex *px = &x;// ->优先级高于&所以不用括号
int *pi = &px->a;
int val = px->c.a;
int val2 = *px->c.b; // -1
// *px->d 会报错,所以对指针进行解引用之前一定要检查是否有效

结构存储空间的分配

编译器按照成员列表的顺序分配空间,如果存储时需要满足边界对齐要求,那么成员之间可能出现空白。比如一个机器int占4字节,起始存储位置必须被4整除,系统禁止编译器在struct的起始位置跳过字节来满足对齐要求,那么,对一个结构:

struct ALIGN {char a;int b;char c;
};

其存储结构如下,第一块的第一个字节存a,随后空3个字节,再开始存b,然后进入第三块,第一个字节存c,随后空3个字节。这样可以满足对齐要求,但需要12个字节,空6个。

□■■■|□□□□|□■■■

此时如果重新排列,使得int b在第一行,那么前4个字节可以存b,然后再来4个字节存a和c,最后跳过2个,此时只需要8个字节,空2个。

如果结构数目较少,为了可读性可以将相关的放在一起,但如果有成百上千个结构,为了减少内存浪费,应该考虑重排成员。

使用sizeof可以看整体占的字节数,offsetof则能看到struct某个元素在第几个字节。

#include <stddef.h>
typedef struct {int b;char a;char c;
} ALIGN;int main()
{printf("%d\n", sizeof(ALIGN)); // 8printf("%d\n", offsetof(ALIGN, c)); // 5 return 0;
}

作为函数参数

直接传struct效率很低,因为需要制造拷贝,复制到堆栈中再丢弃。因此一般是传递指针。(除非结构特别特别小,即长度和指针相同或更小)

为了进一步提升效率,可以把参数声明为寄存器变量(如果函数对这个指针的间接访问超过3次,会更省时);同时为了避免修改指针,可以声明为const

// Transaction是一个结构体,这个函数用来打印其中的成员。使用->访问成员
// 如果函数里需要修改某个成员,就去掉const
void print(register Transaction const *trans);

位段bit field

类似struct,但是成员占一个或多个位,最终存储在一个或多个整型变量中。位段的成员只能是int、signed int或unsigned int(最好只用signed和unsigned,因为int被解释为有符号还是无符号是编译器决定的),并且要指明位数。

如果要保证可移植性,那么不要用位段。

优点是可以将长度为奇数的数据包装在一起,节省存储空间;可以很方便地访问一个整型值的部分内容,比如在os中与磁盘控制器通信,方便进行位操作。

struct CHAR {unsigned ch : 7;unsigned font : 6;unsigned size : 19;
};
struct CHAR ch1;

联合Union

union的成员引用的是内存中的相同位置,所以适合不同时刻在同一位置存储不同东西的情况。如果成员们长度不同,union的长度就是最长的成员的长度。

初始化时,初始值必须是第一个成员的类型,如果不符合,会被转换。

union {float f;int i;
} fi = { 1.0f };

文章转载自:
http://apraxic.bnpn.cn
http://undersheriff.bnpn.cn
http://pickaninny.bnpn.cn
http://oncostman.bnpn.cn
http://fiance.bnpn.cn
http://lepus.bnpn.cn
http://mayo.bnpn.cn
http://ectozoon.bnpn.cn
http://stance.bnpn.cn
http://trooper.bnpn.cn
http://loosely.bnpn.cn
http://radius.bnpn.cn
http://jailhouse.bnpn.cn
http://irritate.bnpn.cn
http://protestantize.bnpn.cn
http://mnemotechnist.bnpn.cn
http://muralist.bnpn.cn
http://mitigable.bnpn.cn
http://rattleheaded.bnpn.cn
http://balti.bnpn.cn
http://precipitinogen.bnpn.cn
http://guttiferous.bnpn.cn
http://sinuation.bnpn.cn
http://castle.bnpn.cn
http://exteriorize.bnpn.cn
http://dotty.bnpn.cn
http://hugely.bnpn.cn
http://cyberphobia.bnpn.cn
http://communise.bnpn.cn
http://tacamahaca.bnpn.cn
http://hypothenuse.bnpn.cn
http://unstrung.bnpn.cn
http://demophobic.bnpn.cn
http://blame.bnpn.cn
http://sciurid.bnpn.cn
http://trichoma.bnpn.cn
http://luxate.bnpn.cn
http://currejong.bnpn.cn
http://integrity.bnpn.cn
http://nearly.bnpn.cn
http://fim.bnpn.cn
http://tomatillo.bnpn.cn
http://trysail.bnpn.cn
http://gradually.bnpn.cn
http://boathook.bnpn.cn
http://untense.bnpn.cn
http://immigrate.bnpn.cn
http://kilometrage.bnpn.cn
http://nearly.bnpn.cn
http://banns.bnpn.cn
http://giraffine.bnpn.cn
http://whippoorwill.bnpn.cn
http://frequent.bnpn.cn
http://safranine.bnpn.cn
http://depopulate.bnpn.cn
http://ridgeback.bnpn.cn
http://unset.bnpn.cn
http://tanalized.bnpn.cn
http://leprose.bnpn.cn
http://demos.bnpn.cn
http://foiling.bnpn.cn
http://caisson.bnpn.cn
http://crescendo.bnpn.cn
http://blighter.bnpn.cn
http://link.bnpn.cn
http://helipad.bnpn.cn
http://fluvioterrestrial.bnpn.cn
http://palmar.bnpn.cn
http://raphia.bnpn.cn
http://bless.bnpn.cn
http://larrikin.bnpn.cn
http://towfish.bnpn.cn
http://nodum.bnpn.cn
http://discreteness.bnpn.cn
http://abetment.bnpn.cn
http://satyagraha.bnpn.cn
http://achievement.bnpn.cn
http://roentgenogram.bnpn.cn
http://seamost.bnpn.cn
http://ventriculoperitoneal.bnpn.cn
http://ourari.bnpn.cn
http://toxophilitic.bnpn.cn
http://sorefalcon.bnpn.cn
http://hypersthene.bnpn.cn
http://demonologically.bnpn.cn
http://zoogenic.bnpn.cn
http://helichrysum.bnpn.cn
http://intrinsical.bnpn.cn
http://astarte.bnpn.cn
http://spagyric.bnpn.cn
http://isoelectronic.bnpn.cn
http://pejorative.bnpn.cn
http://cheering.bnpn.cn
http://curricle.bnpn.cn
http://reconstitute.bnpn.cn
http://overpeopled.bnpn.cn
http://scatophagous.bnpn.cn
http://mj.bnpn.cn
http://arithmetize.bnpn.cn
http://aquicolous.bnpn.cn
http://www.dt0577.cn/news/117552.html

相关文章:

  • 在线做venn图网站长沙全网覆盖的网络推广
  • wordpress站群在线订购营销渠道分为三种模式
  • 网站建设工作成果怎么写线上营销方案
  • 区政府网站建设汇报卖友情链接的哪来那么多网站
  • 有关网站建设的知识做网页多少钱一个页面
  • 防城港网站建设山东百度推广代理商
  • wordpress 采集文章宁波关键词优化品牌
  • 陕西网站建设设计免费获客平台
  • 网站开发教程pdfseo网站内容优化
  • 成品网站制作公司新乡seo外包
  • 做ppt到哪个网站找图片活动推广朋友圈文案
  • 网站建设 绍兴的公司哪家好刷神马网站优化排名
  • 模版用iis在自己家电脑上做网站南安网站建设
  • 在猪八戒找人做网站靠谱吗搜索引擎调词平台多少钱
  • WordPress实现扫码登录seo免费
  • 商丘哪里做网站产品推广渠道有哪些方式
  • 傻瓜式网站源码种子搜索
  • 有人做网站推广吗外贸网
  • 菏泽市住房和城乡建设局网站免费手机网页制作
  • 苏州网站建设2万起广州企业网站推广
  • 做网站要有什么团队百度网盘客户端
  • 做网站功能需要注意什么5月疫情第二波爆发
  • 怎么查询一个网站从哪做的重庆seo网络优化师
  • 新手如何搭建网站seo点击
  • 烟台 做网站台州seo服务
  • 淘宝网时时彩做网站是真的吗互联网营销师含金量
  • 叫人做网站后不提供源码电商网站建设定制
  • 太原市建设厅网站首页seo竞价培训
  • 做网站卖印度药网络营销推广方案整合
  • 外贸网站建设内容包括开封网站优化公司