二维数组cast
来源:互联网 发布:淘宝免费报名活动 编辑:程序博客网 时间:2024/06/05 11:32
学写动态二维数组,不同操作系统之间的处理差异很大,什么原因呢?。
代码:
一下是不同操作系统的执行情况:
1,Linux ubuntu 2.6.24-22-generic #1 SMP Mon Nov 24 19:35:06 UTC 2008 x86_64 GNU/Linux
gcc version 4.2.4 (Ubuntu 4.2.4-1ubuntu4)
a[0][0] 0x7fff76c74770
a[0][1] 0x7fff76c74774
a[0][2] 0x7fff76c74778
a[1][0] 0x7fff76c7477c
a[1][1] 0x7fff76c74780
a[1][2] 0x7fff76c74784
a[2][0] 0x7fff76c74788
a[2][1] 0x7fff76c7478c
a[2][2] 0x7fff76c74790
a: 0x7fff76c74770
a+1: 0x7fff76c74778
a+2: 0x7fff76c74780
a+5: 0x7fff76c74798
*(a+1): 3
*(a+2): 5
*(a+5): 1852916164
2,AIX aix 3 5 00C97AC04C00 powerpc unknown AIX
gcc version 4.2.0
a[0][0] 2ff22bc8
a[0][1] 2ff22bcc
a[0][2] 2ff22bd0
a[1][0] 2ff22bd4
a[1][1] 2ff22bd8
a[1][2] 2ff22bdc
a[2][0] 2ff22be0
a[2][1] 2ff22be4
a[2][2] 2ff22be8
a: 2ff22bc8
a+1: 2ff22bcc
a+2: 2ff22bd0
a+5: 2ff22bdc
*(a+1): 2
*(a+2): 3
*(a+5): 6
3,FreeBSD freebsd.unix-center.net 6.2-RELEASE FreeBSD 6.2-RELEASE #0: Fri Jan 12
08:43:30 UTC 2007
gcc version 3.4.6 [FreeBSD] 20060305
a[0][0] 0x7fffffffebc0
a[0][1] 0x7fffffffebc4
a[0][2] 0x7fffffffebc8
a[1][0] 0x7fffffffebcc
a[1][1] 0x7fffffffebd0
a[1][2] 0x7fffffffebd4
a[2][0] 0x7fffffffebd8
a[2][1] 0x7fffffffebdc
a[2][2] 0x7fffffffebe0
a: 0x7fffffffebc0
a+1: 0x7fffffffebc8
a+2: 0x7fffffffebd0
a+5: 0x7fffffffebe8
*(a+1): 3
*(a+2): 5
*(a+5): 4195742
4,Linux fedora.unix-center.net 2.6.27.10-grsec2.1.12 #2 SMP Fri May 8 07:04:03 CST 2009 i686 i686 i386 GNU/Linux
gcc version 4.3.2 20081105 (Red Hat 4.3.2-7) (GCC)
a[0][0] 0x59863d2c
a[0][1] 0x59863d30
a[0][2] 0x59863d34
a[1][0] 0x59863d38
a[1][1] 0x59863d3c
a[1][2] 0x59863d40
a[2][0] 0x59863d44
a[2][1] 0x59863d48
a[2][2] 0x59863d4c
a: 0x59863d2c
a+1: 0x59863d30
a+2: 0x59863d34
a+5: 0x59863d40
*(a+1): 2
*(a+2): 3
*(a+5): 6
5,SunOS t1000 5.10 Generic_118833-33 sun4v sparc SUNW,Sun-Fire-T1000 Solaris
gcc version 4.0.3 (gccfss)
a[0][0] ffbffcd8
a[0][1] ffbffcdc
a[0][2] ffbffce0
a[1][0] ffbffce4
a[1][1] ffbffce8
a[1][2] ffbffcec
a[2][0] ffbffcf0
a[2][1] ffbffcf4
a[2][2] ffbffcf8
a: ffbffcd8
a+1: ffbffcdc
a+2: ffbffce0
a+5: ffbffcec
*(a+1): 2
*(a+2): 3
*(a+5): 6
6,window xp home
gcc version 3.4.2 (mingw-special)
a[0][0] 0013FF74
a[0][1] 0013FF78
a[0][2] 0013FF7C
a[1][0] 0013FF80
a[1][1] 0013FF84
a[1][2] 0013FF88
a[2][0] 0013FF8C
a[2][1] 0013FF90
a[2][2] 0013FF94
a: 0013FF74
a+1: 0013FF78
a+2: 0013FF7C
a+5: 0013FF88
*(a+1): 2
*(a+2): 3
*(a+5): 6
结论:
发现有两大类
1,ubuntu和FreeBSD,a和a+1的递进式加2(就是列数)的。
2,aix,Fedora,Solaris和xp是递进1的。
第一感觉是不是和OS有关系,可是linux和unix有相同的,xp和linux和unix也有相同的。
第二感觉是不是和编译器有关系,可是4.2.4和3.4.6是第一种情况,3.4.2和4.0.3是第二种情况。
那到底是和什么有关系呢?
机器硬件配置:unix-center.net
发现问题是这个样子的,是因为在被访问函数void g(int** a)中,a是指向int*类型的指针,所以a+1的值为a的值+sizeof(int*)。
以上系统中只有unbuntu和freebsd是64为系统(使用file命令可以发现,这两个系统的指针是64bytes的),而其他的是
32位系统,所以才会出现上面的结果。
总结起来还是对指针的理解有误。
- 二维数组cast
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 类似gwt的java版Ext编写方式 希望给点建议好改进改进
- GDI+效率问题与优化
- 操作系统进程描述
- Reflection(反射)[C#]
- 高精度算法(加法)
- 二维数组cast
- 选择
- 重新启用
- Learning jQuery 1.3
- ubuntu下安装svn提供HTTP版本管理服务
- No operations allowed after connection closed 错误
- SQL编程规范
- 最犇的.Net下的委托入门讲解
- 在打包程序中自动安装SQL Server数据库