回复 101楼 九转星河
这样长度不同还是没有普片性~~还是建议使用时每个数组的一维长度要一致~因为强制转型的时候数组长度参数不能带有变量~~这也说明了某些编译器在处理数组长度方面的时候不是在编译过程中处理的~而是在预编译的时候处理的(这也是为什么一些老式编译器数组长度大小不能为变量的原因)~~~顺带一句~sizeof 得出来的是常量~~是在预编译的时候已经转换成机器指令的常量~所以在编译过程中同一个sizeof的值是不会发生变化的~~~
PS:这种方法的适应度感觉还是不高~原因在于运算数据的转型是一个常量而不是变量所以如果要读取多维数据的话……还是要调用多维参数作为变量并在读取数据进行一维运算~如果数据类型不同就要调用数据单位长度参数作为变量获取内存数据~
所以得出结论就是本来就没有"维度"这个概念~有的只是数据类型影响影响指针偏移量~读取指针地址似乎是在读取"维度空间"~实际上是对数据进行转型并读取其中内容~所以如果要进行一些通用化操作就要进行"原子尺度"上的操作--既以字节为单位读取或者修改数据~所以如果要对多维数据进行定位的时候~除了用默认定义的变量类型或者强制转型的方法外~通用的方法就是对读取数据传入参数进行定位……~~~这样就意味着储存数据本身就没有数据类型这个概念~就光是一个值(不管那个储存值是什么)~~数据类型的作用只是存取或者修改的过程中对数据执行机器指令的处理~
还有一点值得一提~每个地址都对应一个值~每个值都对应一个地址(注意~地址本身是常量)~所以这样理解的话就不存在"地址级数"问题~所以*p的值有两种情况~一种是还是地址值(例如二维数组)~~另一种就是地址里面的储存内容(注意这里的"内容"可能是一个地址的"值"--例如二重指针)~~至于*p读取的是地址还是内容就要看*p的数据类型是否具有数组属性了~所以虽然指针虽然具有数组属性~但却不具备"长度"属性~~所谓对"长度"的理解有两点--第一点就是在长度作用范围之内的数据受"保护"(既不会被系统非法占用或改写)第二点就是读取地址的行为是以"地址"的形式而非"储存值"的形式---这样看的话int a[1]和int a看上去数据类型和占用单元都一样~但实际上前者具备"数组"属性而后者不具备~所以前者读取a的值是地址而后者是储存值~
所以数组合和指针是有一定区别的~~~~
[此贴子已经被作者于2017-5-23 18:55编辑过]

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]