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

温州网站推广注册公司流程及费用办公场所 上海

温州网站推广,注册公司流程及费用办公场所 上海,wordpress 后台攻击,上海品牌网站建设公司排名1、c/c语言中不少地方#xff0c;数组和指针可以相互替换使用#xff0c;容易让人产生一种错觉#xff0c;指针和数组是等价的。 数组要么在静态存储区域创建#xff0c;如全局数组#xff1b;要么在栈上创建如函数内的数组。数组的名称对应着#xff08;而不是指向…1、c/c语言中不少地方数组和指针可以相互替换使用容易让人产生一种错觉指针和数组是等价的。 数组要么在静态存储区域创建如全局数组要么在栈上创建如函数内的数组。数组的名称对应着而不是指向一块内存它的地址和容量在其生命周期内保持不变数组的内容可变。 指针可以指向任意类型的内存块它的特征是可变的所以常常用指针来操作动态内存指针比数组灵活当时容易出错。 char a[] hello; a[0] x; coutaendl; char *p world; //这里的p指向的是常量字符串 p[0] x; //编译器不能发现该错误 coutp; 如上边一段代码a是容量为6的字符数组a中的内容是可以改变的如a[0]x。指针p指向的是一个常量字符串“world”(位于静态存储区)常量字符串的内容是不能够被修改的。但是从语法的角度看编译器并不知道p[0]x有什么问题但是该语句在企图执行时就会出错。 char a[] hello; char *p world; coutsizeof(a)endl; //6 coutsizeof(p)endl; //4 coutsizeof(char *)endl; // 4 coutsizeof(void *)endl; //4 coutsizeof(int *)endl; //4 coutsizeof(short *)endl; //4   另外指针和数组的容量计算也是有区别的。以上一段代码为例sizeof(a)的值为6,但是sizeof(p)的值为4这是因为sizeofa可以计算出数组的字节数但是sizeof(p)得到的是一个指针变量的字节数相当于sizeof(char *),而不是p所指向的内存容量。c、c语言是没有办法知道指针所指向的内存容量除非在申请内存时记住。   void test(char p[100]) {coutsizeof(p)endl;//4 }   注意当数组作为函数的参数进行传递时该数组自动退化为同类型的指针。如上边的代码sizeofp的大小为4。 2、指针参数传递内存 void GetMemory(char *p) {p (char *)malloc(100); }int main() {char *str NULL;GetMemory(str);strcpy(str,hello);printf(%s,str); //运行出错free(str); } 这段代码运行出错原因出自函数Getmemory中。编译器总是要为函数的每个参数制作临时副本指针参数p的副本是_p编译器使_pp。如果函数体内的程序修改了_p的内容就导致了参数p的内容作相应的修改。这就是指针可以用作输出参数的原因。但是在本例中_p申请了新的内存只是把_p所指向的内存地址改变了但是p丝毫未变。所以函数GetMemory并不能输出任何东西每次执行一次GetMemory就会泄露一块内存。因为没有执行free释放内存。 void GetMemory2(char **p,int num) {*p (char *)malloc(num); } 如果一定要使用指针参数去申请内存那么可以使用指向指针的指针如上边的代码。当然也可以使用函数返回值来传递动态内存如 char *GetMemory3(int num) {char *p (char *)malloc(num);return p; } 但是值得注意的是我们这里使用返回值返回的是动态分配的堆内存不是栈内存如果不小心返回的是栈内存就会出错因为在函数结束时栈内存自动消亡了。 char *GetMemory4() {char p[] hello world!return p; //编译器会发出警告 } 对上边的程序稍作修改 char *GetMemory5() {char *p hello world!return p; } 这时候p指向的是字符串常量位于静态存储区生命周期恒定不变那么此时返回的是一个只读的内存块。   3、结构体的存储分配 struct Align1 {int a;char b;char c; }; struct Align2 {char b;int a;char c; }; 如上边所示两个结构体的数据元素一样但是位置顺序不同那么他们占用的内存大小不同。在32位机器中整型4个字节并且他的起始存储位置必须能够被4整除。所以以上两个结构体在内存中分配如图所示 编译器按照成员列表的顺序一个接着一个的给每个成员分配内存。只有当成员之间满足正确的对齐要求时成员之间才会出现用于填充的额外内存空间。有些时候我们有充分的理由决定不对数据结构成员进行重排减少因边界对齐带来的空间损失。例如我们可能想把相关的结构成员存储到一起提高程序的可维护性和可读性。但是如果不存在这样的理由结构成员应该根据他们的边界进行重排减少因为边界对齐而造成的内存损失。当程序创建几百个甚至上千个结构时减少内存浪费的要求就比程序的可读性更为紧迫了。在这种情况下在声明中增加注释可以弥补可读性方面的损失。 运行结果      转载于:https://www.cnblogs.com/newpanderking/p/3825417.html
http://www.pierceye.com/news/807069/

相关文章:

  • 为什么自己做的网站打开是乱码wordpress live-2d
  • 素材下载网站电商自建站
  • 浙江省的网站建设公司有哪些代理注册公司一般多少钱
  • 如何在建设银行网站预约纪念币东莞网站建设服务有什
  • 有哪些可以做h5的网站代理网址上境外网
  • 做网站所需要的代码6红杏直播
  • 南通制作网站wordpress移动版设置
  • 哪个网站有免费ppt下载建筑类网站的推荐理由
  • 视觉差的网站公司外包
  • 基础做网站内蒙住房和城乡建设部网站
  • 发帖效果好的网站展馆展示设计公司排名
  • 童装网站建设文案什么网站做的号
  • 能打开的a站莆田网站建设建站系统
  • 上海市城乡建设管理局网站一个月做网站
  • 网站后台管理系统 aspwordpress拖拽上传
  • 华为手机官方网站登录爬虫做视频网站
  • 山东省工程建设信息官方网站河南网站seo推广
  • 低成本做网站 白之家重庆市建设执业资格注册管理中心网站
  • 电子商务网站建设需求在别的公司做的网站可以转走吗
  • 网站流量怎么做乡1万做网站需要几个人
  • 阿里云centos7做网站怀化网站seo
  • 我做的网站怎样被百度收录易语言 做网站mysql
  • 花店网站模板免费下载9个做简历的网站
  • 东港区网站制作seo推广模式是什么
  • 用织梦做网站能练技术吗广州专业网络推广公司
  • 下载ppt模板免费的网站在线做头像网站
  • 网络推广怎么免费做网站内部优化的方法
  • 沧州wap网站制作哈尔滨建设网证件查询
  • 一键查询注册过的网站快速排名教程
  • 响应式模板网站泰安招聘信息最新招聘2021