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

深圳网站优化价格网站开发使用的技术有哪些

深圳网站优化价格,网站开发使用的技术有哪些,申请了域名怎么建网站,建设工程造价管理基础知识多维数组与多级指针也是初学者感觉迷糊的一个地方。超过二维的数组和超过二级的指针其实并不多用。如果能弄明白二维数组与二级指针#xff0c;那二维以上的也不是什么问题了。所以本节重点讨论二维数组与二级指针。一、二维数组 1、假想中的二维数组布局我们前面讨论过…多维数组与多级指针也是初学者感觉迷糊的一个地方。超过二维的数组和超过二级的指针其实并不多用。如果能弄明白二维数组与二级指针那二维以上的也不是什么问题了。所以本节重点讨论二维数组与二级指针。一、二维数组 1、假想中的二维数组布局我们前面讨论过数组里面可以存任何数据除了函数。下面就详细讨论讨论数组里面存数组的情况。Excel 表我相信大家都见过。我们平时就可以把二维数组假想成一个excel表比如char a[3][4]; 2、内存与尺子的对比实际上内存不是表状的而是线性的。见过尺子吧尺子和我们的内存非常相似。一般尺子上最小刻度为毫米而内存的最小单位为1 个byte。平时我们说32 毫米是指以零开始偏移32 毫米平时我们说内存地址为0x0000FF00 也是指从内存零地址开始偏移0x0000FF00 个byte。既然内存是线性的那二维数组在内存里面肯定也是线性存储的。实际上其内存布局如下图 以数组下标的方式来访问其中的某个元素a[i][j]。编译器总是将二维数组看成是一个一维数组而一维数组的每一个元素又都是一个数组。a[3]这个一维数组的三个元素分别为a[0],a[1],a[2]。每个元素的大小为sizeofa[0],即sizof(char)*4。由此可以计算出a[0],a[1],a[2]三个元素的首地址分别为 a[0] a[0] 1*sizof(char)*4 a[0] 2*sizof(char)*4。亦即a[i]的首地址为 a[0] i*sizof(char)*4。这时候再考虑a[i]里面的内容。就本例而言a[i]内有4个char 类型的元素其每个元素的首地址分别为a[i]a[i]1*sizof(char)a[i]2*sizof(char)a[i]3*sizof(char)即a[i][j]的首地址为a[i]j*sizof(char)。再把a[i]的值用a 表示得到a[i][j]元素的首地址为a i*sizof(char)*4 j*sizof(char)。同样可以换算成以指针的形式表示*(*(ai)j)。经过上面的讲解相信你已经掌握了二维数组在内存里面的布局了。下面就看一个题#include stdio.hintmain(int argc,char * argv[]){int a [3][2]{(0,1),(2,3),(4,5)};int *p;pa [0];printf(%d,p[0]);}问打印出来的结果是多少很多人都觉得这太简单了很快就能把答案告诉我0。不过很可惜错了。答案应该是1。如果你也认为是0那你实在应该好好看看这个题。花括号里面嵌套的是小括号而不是花括号这里是花括号里面嵌套了逗号表达式其实这个赋值就相当于int a [3][2]{ 1, 3,5};所以在初始化二维数组的时候一定要注意别不小心把应该用的花括号写成小括号了。3、p[4][2] - a[4][2]的值为多少上面的问题似乎还比较好理解下面再看一个例子int a[5][5];int (*p)[4];p a;问p[4][2] - a[4][2]的值为多少这个问题似乎非常简单但是几乎没有人答对了。我们可以先写代码测试一下其值然后分析一下到底是为什么。在Visual C6.0 里测试代码如下intmain(){int a[5][5];int (*p)[4];p a;printf(a_ptr%#p,p_ptr%#p\n,a[4][2],p[4][2]);printf(%p,%d\n,p[4][2] - a[4][2],p[4][2] - a[4][2]);return 0;}经过测试可知p[4][2] - a[4][2]的值为-4。这到底是为什么呢下面我们就来分析一下前面我们讲过当数组名a 作为右值时代表的是数组首元素的首地址。这里的a 为二维数组我们把数组a 看作是包含5 个int 类型元素的一维数组,里面再存储了一个一维数组。如此则a 在这里代表的是a[0]的首地址。a1 表示的是一维数组a 的第二个元素。a[4]表示的是一维数组a 的第5 个元素而这个元素里又存了一个一维数组。所以a[4][2]表示的是a[0][0]4*5*sizeof(int) 2*sizeof(int)。根据定义p 是指向一个包含4 个元素的数组的指针。也就是说p1 表示的是指针p 向后移动了一个“包含4 个int 类型元素的数组”。这里1 的单位是p 所指向的空间即4*sizeof(int)。所以p[4]相对于p[0]来说是向后移动了4 个“包含4 个int 类型元素的数组”即p[4]表示的是p[0]4*4*sizeof(int)。由于p 被初始化为a[0]那么p[4][2]表示的是a[0][0]4*4*sizeof(int)2* sizeof(int)。再由上面的讲述p[4][2] 和a[4][2]的值相差4 个int 类型的元素。现在上面测试出来的结果也可以理解了吧其实我们最简单的办法就是画内存布局图 这里最重要的一点就是明白数组指针p 所指向的内存到底是什么。解决这类问题的最好办法就是画内存布局图。二、二级指针 1、二级指针的内存布局二级指针是经常用到的尤其与二维数组在一起的时候更是令人迷糊。例如char **p;定义了一个二级指针变量p。p 是一个指针变量毫无疑问在32 位系统下占4 个byte。它与一级指针不同的是一级指针保存的是数据的地址二级指针保存的是一级指针的地址。下图帮助理解 我们试着给变量p 初始化A)p NULL;B)char *p2; p p2;任何指针变量都可以被初始化为NULL注意是NULL不是NUL更不是null二级指针也不例外。也就是说把指针指向数组的零地址。联想到前面我们把尺子比作内存如果把内存初始化为NULL就相当于把指针指向尺子上0 毫米处这时候指针没有任何内存可用。当我们真正需要使用p 的时候就必须把一个一级指针的地址保存到p 中所以B的赋值方式也是正确的。给p 赋值没有问题但怎么使用p 呢这就需要我们前面多次提到的钥匙“*”。 第一步根据p 这个变量取出它里面存的地址。 第二步找到这个地址所在的内存。 第三步用钥匙打开这块内存取出它里面的地址*p 的值。 第四步找到第二次取出的这个地址。 第五步用钥匙打开这块内存取出它里面的内容这就是我们真正的数据**p 的值。我们在这里用了两次钥匙“*”才最终取出了真正的数据。也就是说要取出二级指针所真正指向的数据需要使用两次两次钥匙“*”。至于超过二维的数组和超过二维的指针一般使用比较少而且按照上面的分析方法同样也可以很轻松的分析明白这里就不再详细讨论。读者有兴趣的话可以研究研究。
http://www.zqtcl.cn/news/286413/

相关文章:

  • 硅谷网站开发薪酬wordpress热门吗
  • 红酒营销型网站建设天一建设网站
  • 做网站建设公司哪家好安徽省住房建设部官方网站
  • 网站被黑咋样的柳州正规网站制作公司哪家好
  • 莱芜网站开发代理四川网络推广服务
  • 应该知道的网站网站全网建设莱芜
  • 北京网站页设计制作广州专业网站改版
  • 重庆网站建设建站收费免费外链网盘
  • 做加盟代理的网站比较好的网页网站设计
  • 兴义网站开发企业标准备案平台官网
  • 蓝彩网络科技_齐齐哈尔微信营销_齐齐哈尔网站建设会员卡管理系统哪里买
  • 织梦门户网站做大后建个人免费网站用哪个
  • 深圳市建设管理中心西安官网seo
  • 网站开发工作方案自己做的网站怎么维护
  • 潍坊建设部门管理网站做网站如何接单
  • 定制高端网站建设设计建立的近义词
  • 企业网站建设进度邢台163官网
  • 17做网店网站池尾替代wordpress 搜索
  • 网站建设资料 优帮云商品分类标准
  • 鄂尔多斯 网站建设俐侎族网站建设背景
  • 佛山专业网站建设公司上海公司官网
  • 那里做网站好网站模板 登陆
  • 网站的服务器打不开wordpress 修改默认路径
  • 外贸网站做几种产品合肥网络公司哪个最好
  • 长乐区建设局网站一般通过什么渠道了解防灾减灾知识
  • 泰安商城网站开发设计什么网站备案比较快
  • 织梦网站修改首页图片网站名称去哪里注册
  • 电脑版 做网站尺寸怎么查找网站后台
  • 南京网站建设公司国际新闻头条最新消息
  • 类似于wordpress的网站吗做网站前端难吗