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

网站开发需要的软件anivia wordpress templates 1.3

网站开发需要的软件,anivia wordpress templates 1.3,河东做网站公司,公司官网怎样制作一、指针数组和数组指针的内存布局 初学者总是分不出指针数组与数组指针的区别。其实很好理解#xff1a;指针数组#xff1a;首先它是一个数组#xff0c;数组的元素都是指针#xff0c;数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。 数组指针#xf…一、指针数组和数组指针的内存布局 初学者总是分不出指针数组与数组指针的区别。其实很好理解指针数组首先它是一个数组数组的元素都是指针数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。 数组指针首先它是一个指针它指向一个数组。在32 位系统下永远是占4 个字节至于它指向的数组占多少字节不知道。它是“指向数组的指针”的简称。下面到底哪个是数组指针哪个是指针数组呢A)int *p1[10];B)int (*p2)[10];每次上课问这个问题总有弄不清楚的。这里需要明白一个符号之间的优先级问题。“[]”的优先级比“*”要高。p1 先与“[]”结合构成一个数组的定义数组名为p1int *修饰的是数组的内容即数组的每个元素。那现在我们清楚这是一个数组其包含10 个指向int 类型数据的指针即指针数组。至于p2 就更好理解了在这里“”的优先级比“[]”高“*”号和p2 构成一个指针的定义指针变量名为p2int 修饰的是数组的内容即数组的每个元素。数组在这里并没有名字是个匿名数组。那现在我们清楚p2 是一个指针它指向一个包含10 个int 类型数据的数组即数组指针。我们可以借助下面的图加深理解 二、int (*)[10] p2-----也许应该这么定义数组指针 这里有个有意思的话题值得探讨一下平时我们定义指针不都是在数据类型后面加上指针变量名么这个指针p2 的定义怎么不是按照这个语法来定义的呢也许我们应该这样来定义p2int (*)[10] p2;int (*)[10]是指针类型p2 是指针变量。这样看起来的确不错不过就是样子有些别扭。其实数组指针的原型确实就是这样子的只不过为了方便与好看把指针变量p2 前移了而已。你私下完全可以这么理解这点。虽然编译器不这么想。^_^三、再论a 和a 之间的区别 既然这样那问题就来了。前面我们讲过a 和a 之间的区别现在再来看看下面的代码int main(){char a[5]{A,B,C,D};char (*p3)[5] a;char (*p4)[5] a;return 0;}上面对p3 和p4 的使用哪个正确呢p31 的值会是什么p41 的值又会是什么毫无疑问p3 和p4 都是数组指针指向的是整个数组。a 是整个数组的首地址a是数组首元素的首地址其值相同但意义不同。在C 语言里赋值符号“”号两边的数据类型必须是相同的如果不同需要显示或隐式的类型转换。p3 这个定义的“”号两边的数据类型完全一致而p4 这个定义的“”号两边的数据类型就不一致了。左边的类型是指向整个数组的指针右边的数据类型是指向单个字符的指针。在Visual C6.0 上给出如下警告warning C4047: initializing : char (*)[5] differs in levels of indirection from char *。还好这里虽然给出了警告但由于a 和a 的值一样而变量作为右值时编译器只是取变量的值所以运行并没有什么问题。不过我仍然警告你别这么用。既然现在清楚了p3 和p4 都是指向整个数组的那p31 和p41 的值就很好理解了。但是如果修改一下代码会有什么问题p31 和p41 的值又是多少呢int main(){char a[5]{A,B,C,D};char (*p3)[3] a;char (*p4)[3] a;return 0;}甚至还可以把代码再修改int main(){char a[5]{A,B,C,D};char (*p3)[10] a;char (*p4)[10] a;return 0;}这个时候又会有什么样的问题p31 和p41 的值又是多少上述几个问题希望读者能仔细考虑考虑。四、地址的强制转换 先看下面这个例子struct Test{int Num;char *pcName;short sDate;char cha[2];short sBa[4];}*p;假设p 的值为0x100000。如下表表达式的值分别为多少p 0x1 0x___ ?(unsigned long)p 0x1 0x___?(unsigned int*)p 0x1 0x___?我相信会有很多人一开始没看明白这个问题是什么意思。其实我们再仔细看看这个知识点似曾相识。一个指针变量与一个整数相加减到底该怎么解析呢还记得前面我们的表达式“a1”与“a1”之间的区别吗其实这里也一样。指针变量与一个整数相加减并不是用指针变量里的地址直接加减这个整数。这个整数的单位不是byte 而是元素的个数。所以p 0x1 的值为0x100000sizofTest*0x1。至于此结构体的大小为20byte前面的章节已经详细讲解过。所以p 0x1 的值为0x100014。(unsigned long)p 0x1 的值呢这里涉及到强制转换将指针变量p 保存的值强制转换成无符号的长整型数。任何数值一旦被强制转换其类型就改变了。所以这个表达式其实就是一个无符号的长整型数加上另一个整数。所以其值为0x100001。(unsigned int*)p 0x1 的值呢这里的p 被强制转换成一个指向无符号整型的指针。所以其值为0x100000sizofunsigned int*0x1等于0x100004。上面这个问题似乎还没啥技术含量下面就来个有技术含量的在x86 系统下其值为多少intmain(){int a[4]{1,2,3,4};int *ptr1(int *)(a1);int *ptr2(int *)((int)a1);printf(%x,%x,ptr1[-1],*ptr2);return 0;}这是我讲课时一个学生问我的题他在网上看到的据说难倒了n 个人。我看题之后告诉他这些人肯定不懂汇编一个懂汇编的人这种题实在是小case。下面就来分析分析这个问题根据上面的讲解a1 与a1 的区别已经清楚。ptr1将a1 的值强制转换成int*类型赋值给int* 类型的变量ptrptr1 肯定指到数组a 的下一个int 类型数据了。ptr1[-1]被解析成*(ptr1-1)即ptr1 往后退4 个byte。所以其值为0x4。ptr2按照上面的讲解(int)a1 的值是元素a[0]的第二个字节的地址。然后把这个地址强制转换成int*类型的值赋给ptr2也就是说*ptr2 的值应该为元素a[0]的第二个字节开始的连续4 个byte 的内容。其内存布局如下图 好问题就来了这连续4 个byte 里到底存了什么东西呢也就是说元素a[0],a[1]里面的值到底怎么存储的。这就涉及到系统的大小端模式了如果懂汇编的话这根本就不是问题。既然不知道当前系统是什么模式那就得想办法测试。大小端模式与测试的方法在第一章讲解union 关键字时已经详细讨论过了请翻到彼处参看这里就不再详述。我们可以用下面这个函数来测试当前系统的模式。int checkSystem( ){union check{int i;char ch;} c;c.i 1;return (c.ch 1);}如果当前系统为大端模式这个函数返回0如果为小端模式函数返回1。也就是说如果此函数的返回值为1 的话*ptr2 的值为0x2000000。如果此函数的返回值为0 的话*ptr2 的值为0x100。
http://wiki.neutronadmin.com/news/460765/

相关文章:

  • 龙岩北京网站建设设计师兼职平台
  • 网站的颜色河北邯郸是几线城市
  • 免费化妆品网站模板下载洛可可设计集团
  • 南昌建网站那家好企业网站开发模板下载
  • 京美建站东莞龙岗网站建设
  • c#+网站开发实例黄山景区的网站做的怎么样
  • 建设网站设备预算网站服务器安全防护
  • 360兼容模式 网站变形大网站建设规范
  • asp网站怎么打开安徽建新建设工程有限公司网站
  • 手机网站建设策划模板网页文档的默认扩展名为
  • 珠海建设网站机构wordpress主题预览插件
  • 百度百科网站怎么做电子商务网站建设与管理的考试
  • 家居品牌网站设计论文美术馆网站网页设计方案
  • 东莞什么行业做网站的多网页设计多少钱一个月
  • 做网站数据库要建什么表网站建设群
  • 网站后台怎么用ftp打开wordpress php版本号
  • 400电话申请网站源码程序北票网络推广
  • 德成建设集团有限公司网站wordpress 修改网址
  • 电商类网站开发专业进出口贸易网站
  • php网站说明年会策划
  • 心理咨询网站php后台一般需要哪些模块国外注册公司流程及费用
  • 如何建立一家公司网站网站建设常用工具
  • 互动网络游戏公司网站建设商城型网站建设多少钱
  • 苏州 手机网站工业设计专业三大软件
  • 公司网站制作都需要图片拼车平台网站开发
  • wordpress 机主题上海网站优化海
  • 苏州住房与城乡建设网站海城做网站
  • 官方网站建设的方法有哪些方面免费网络营销公司哪家好
  • 搜索引擎网站建设网站欢迎页面怎么做
  • 网站建设下什么科目wordpress全景图