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

网站建设深中国建筑是国企还是央企

网站建设深,中国建筑是国企还是央企,岚山网站建设报价,wordpress新用户下载权限0x01 存储类别 1、作用域 一个C变量的作用域可以是块作用域、函数作用域、函数原型作用域或文件作用域。 1.1 块作用域#xff1a; 块是用一对花括号括起来的代码区域。比如函数体就是一个块。定义在块中的变量具有块作用域#xff0c;块作用域变量的可见范围是从定义处到包…0x01 存储类别 1、作用域 一个C变量的作用域可以是块作用域、函数作用域、函数原型作用域或文件作用域。 1.1 块作用域 块是用一对花括号括起来的代码区域。比如函数体就是一个块。定义在块中的变量具有块作用域块作用域变量的可见范围是从定义处到包含该定义的块的末尾 1.2 函数作用域 仅用于goto语句的标签。一个标签首次出现在函数的内层块中它的作用域也延伸至整个函数 1.3 函数原型作用域 用于函数原型中的形参名作用范围是从形参定义处到原型声明结束。这意味着编译器在处理函数原型中的形参时只关心它的类型而形参名通常无关紧要。 1.4文件作用域 变量的定义在函数外面具有文件作用域从它的定义处到该定义所在文件的末尾均可见。 2、链接 C变量有3种链接属性外部链接、内部链接或无链接。具有块作用域、函数作用域或函数原型作用域的变量都是无链接变量。这意味着这些变量属于定义他们的块、函数或原型私有。具有文件作用域的变量可以是外部链接或内部链接。外部链接变量可以在多文件程序中使用内部链接变量只能在一个文件中使用。当一个文件作用域变量用static修饰时就是内部链接 3、存储期 C有4种存储期静态存储期、线程存储期、自动存储期、动态分配存储期 静态存储期在程序的执行期间一直存在文件作用域具有静态存储期线程存储期用于并发程序设计程序执行可被分为多个线程。从被声明到线程结束一直存在自动存储期块作用域的变量通常都具有自动存储期当程序进入定义这些变量的块时为这些变量分配内存当退出这个块时释放刚才为变量分配的内存 4、存储类别说明符 auto表名变量是自动存储期只能用于块作用域的变量声明中。由于在块中声明的变量本身就具有自动存储期所以使用auto主要是为了明确表达要使用外部变量同名的局部变量的意图。register 说明符也只用于块作用域的变量它把变量归为寄存器存储类别请求最快速度访问该变量。同时还保护了该变量的地址不被获取。static 说明符创建的对象具有静态存储期载入程序时创建对象当程序结束时对象消失。如果static 用于文件作用域声明作用域受限于该文件。如果 static 用于块作用域声明作用域则受限于该块。extern 说明符表明声明的变量定义在别处。如果包含 extern 的声明具有文件作用域则引用的变量必须具有外部链接。如果包含 extern 的声明具有块作用域则引用的变量可能具有外部链接或内部链接这接取决于该变量的定义式声明。 5、小结 0x02 存储类别和函数 函数也有存储类别可以是外部函数默认或静态函数。外部函数可以被其他文件的函数访问但是静态函数只能用于其定义所在的文件。 double gamma(double);   /* 该函数默认为外部函数 */ static double beta(int, int); extern double delta(double, int);在同一个程序中其他文件中的函数可以调用gamma()和delta()但是不能调用beta()因为以static存储类别说明符创建的函数属于特定模块私有。这样做避免了名称冲突的问题由于beta()受限于它所在的文件所以在其他文件中可以使用与之同名的函数。 通常的做法是用 extern 关键字声明定义在其他文件中的函数。这样做是为了表明当前文件中使用的函数被定义在别处。除非使用static关键字否则一般函数声明都默认为extern。 在rand0.c文件里 static unsigned long int next1; unsigned int rand0(void) {nextnext*110351524512345;return (unsigned int) (next / 65536 )%32768; }在r_drive0.c文件里 #include stdio.hextern unsigned int rand0(void);int main(void) {int count;for(count 0;count5;count)printf(%d\n,rand0());return 0; }next是静态内部链接存储期在程序的执行期间一直存在作用域是rand0.c文件,其他就不可以访问了。 unsigned int rand0(void)是外部函数其他文件可以调用用 extern 关键字声明定义rand0.c文件里 0x03 分配内存 malloc()和free malloc()接收一个参数是所需内存的字节数返回动态分配内存块的首字节地址。如果 malloc()分配内存失败将返回空指针。malloc会找到合适的空闲内存块这样的内存是匿名的,malloc()函数可用于返回指向数组的指针、指向结构的指针等所以通常该函数的返回值会被强制转换为匹配的类型free()函数的参数是之前malloc()返回的地址该函数释放之前malloc()分配的内存一些操作系统在程序结束时会自动释放动态分配的内存但是有些系统不会。为保险起见请使用free()不要依赖操作系统来清理。malloc()和free()的原型都在stdlib.h头文件中。因为char表示1字节malloc()的返回类型通常被定义为指向char的指针。然而从ANSI C标准开始C使用一个新的类型指向void的指针把指向 void的指针赋给任意类型的指针完全不用考虑类型匹配的问题 #include stdlib.h #include stdio.hint main(void) {double *ptd;int max5;int number;int i;ptd(double *)malloc(max*sizeof(double));for(i0;imax;i){ptd[i]i;printf(%f\n,ptd[i]);}free(ptd);return 0;}上面的程序是动态分配数组 反汇编 6: double *ptd; 7: int max5; 00401028 C7 45 F8 05 00 00 00 mov dword ptr [ebp-8],5 8: int number; 9: int i; 10: 11: ptd(double *)malloc(max*sizeof(double)); 0040102F 8B 45 F8 mov eax,dword ptr [ebp-8] 00401032 C1 E0 03 shl eax,3 00401035 50 push eax 00401036 E8 95 00 00 00 call malloc (004010d0) 0040103B 83 C4 04 add esp,4 0040103E 89 45 FC mov dword ptr [ebp-4],eax 12: 13: for(i0;imax;i) 00401041 C7 45 F0 00 00 00 00 mov dword ptr [ebp-10h],0 00401048 EB 09 jmp main43h (00401053) 0040104A 8B 4D F0 mov ecx,dword ptr [ebp-10h] 0040104D 83 C1 01 add ecx,1 00401050 89 4D F0 mov dword ptr [ebp-10h],ecx 00401053 8B 55 F0 mov edx,dword ptr [ebp-10h] 00401056 3B 55 F8 cmp edx,dword ptr [ebp-8] 00401059 7D 2A jge main75h (00401085) 14: { 15: ptd[i]i; 0040105B DB 45 F0 fild dword ptr [ebp-10h] 0040105E 8B 45 F0 mov eax,dword ptr [ebp-10h] 00401061 8B 4D FC mov ecx,dword ptr [ebp-4] 00401064 DD 1C C1 fstp qword ptr [ecxeax*8] 16: printf(%f\n,ptd[i]); 00401067 8B 55 F0 mov edx,dword ptr [ebp-10h] 0040106A 8B 45 FC mov eax,dword ptr [ebp-4] 0040106D 8B 4C D0 04 mov ecx,dword ptr [eaxedx*84] 00401071 51 push ecx 00401072 8B 14 D0 mov edx,dword ptr [eaxedx*8] 00401075 52 push edx 00401076 68 1C 60 42 00 push offset string %f (0042601c) 0040107B E8 D0 1F 00 00 call printf (00403050) 00401080 83 C4 0C add esp,0Ch 17: } 00401083 EB C5 jmp main3Ah (0040104a) 18: free(ptd); 00401085 8B 45 FC mov eax,dword ptr [ebp-4] 00401088 50 push eax 00401089 E8 C2 0A 00 00 call free (00401b50) 0040108E 83 C4 04 add esp,4 19: 20: ptd(double )malloc(maxsizeof(double));的反汇编是 0040102F 8B 45 F8 mov eax,dword ptr [ebp-8] 00401032 C1 E0 03 shl eax,3 00401035 50 push eax 00401036 E8 95 00 00 00 call malloc (004010d0) 0040103B 83 C4 04 add esp,4 0040103E 89 45 FC mov dword ptr [ebp-4],eax先将max的值传给eax左移eax三位相当于eax乘以8就是40刚好是传给malloc的参数值然后压栈调用malloc函数再把eax存入dword ptr [ebp-4]中。 free(ptd);反汇编 00401085 8B 45 FC mov eax,dword ptr [ebp-4] 00401088 50 push eax 00401089 E8 C2 0A 00 00 call free (00401b50) 0040108E 83 C4 04 add esp,4先把dword ptr [ebp-4]的值传给eax就是40是malloc分配内存的大小eax入栈调用free函数释放这段内存
http://www.zqtcl.cn/news/162007/

相关文章:

  • 个人网站服务器一年多少钱科技让生活更美好作文450字
  • 开学第一课汉字做网站网盘资源搜索神器
  • 备案网站应用服务树莓派用来做网站
  • 找装修公司上什么网站湘潭交通网站
  • php网站服务建设网站增加关键字
  • 免费视频网站制作泰州东方医院
  • 单位的网站怎样设计才美观手机开发者选项
  • 网站可以做软件检测吗重庆潼南网站建设价格
  • 忘记网站后台地址建设网站协议范本
  • 平面设计素材网站排行榜前十名程序员网站开发框架
  • 搭建一个网站需要多少钱搜搜
  • 做搜狗手机网站手工制作大全折纸
  • 万网站天眼查询个人信息
  • 一份优秀的网络推广方案名风seo软件
  • 自己建设一个网站步骤中文wordpress主题下载
  • 如何在中国建设银行网站转账成都网页设计培训学校哪家好
  • 青岛建设网站制作wordpress代码高亮显示
  • 品牌创意型网站建设仿 手机 网站模板html
  • 信息化建设期刊网站网络规划设计师 用途
  • 商城网站开发的完整流程图精灵网站建设
  • 网站开发技术描述asp网站建设下载
  • 十堰网站开发洛阳网站开发公司
  • 做盗版网站坂田网站建设推广公司
  • 怎么用织梦修改建设一个新的网站小程序无代码开发平台
  • 网站建设询价外贸网页制作公司哪家好
  • 网页设计与网站建设报告ckplayer整合WordPress
  • 厦门APP开发网站开发公司百度热搜榜单
  • 网站排名英文怎么说网页编辑器在线使用
  • 湖南做防水堵漏工程商网站网站建设编程软件
  • 网站编辑专题怎么做徐州建筑工程招投标网站