免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7416 | 回复: 18
打印 上一主题 下一主题

指针数组 char * aa[8], 为什么元素大小是4呢? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-30 15:27 |只看该作者 |倒序浏览
在书上看到俩个示例:

     char *B[8]        元素大小4, 总大小32

     double *D[5]      元素大小4,  总大小20


为什么指针元素大小都是4呢?  不是应该根据指针数据类型来决定的吗?


为什么第一个元素大小不是1, 第二个元素大小不是8呢?


不知道是我哪里理解错了,还请大家指教。
谢谢!

论坛徽章:
0
2 [报告]
发表于 2010-03-30 15:37 |只看该作者
你定义的都是指针数据类型,只是指针指向的数据不一样,既然都是指针类型,当然长度一样了
潜力拱火帖子
{:3_183:}{:3_192:}

论坛徽章:
0
3 [报告]
发表于 2010-03-30 15:50 |只看该作者
只不过系统32位,用64位的话,元素大小是8.

论坛徽章:
0
4 [报告]
发表于 2010-03-30 15:59 |只看该作者
你定义的都是指针数据类型,只是指针指向的数据不一样,既然都是指针类型,当然长度一样了
潜力拱火帖子
...
mgqw 发表于 2010-03-30 15:37



    指针数据类型大小是多少?

论坛徽章:
0
5 [报告]
发表于 2010-03-30 16:00 |只看该作者
只不过系统32位,用64位的话,元素大小是8.
samlumengjun 发表于 2010-03-30 15:50



    32位, 64位不是指数据总线的宽度吗?

  指针不是应该指地址总线吗?

论坛徽章:
0
6 [报告]
发表于 2010-03-30 16:09 |只看该作者
都是指针变量吧,所以大小是一样的吧。

我一般定义指针都叫void

然后哪个需要直接转换成那个。

论坛徽章:
0
7 [报告]
发表于 2010-03-30 16:29 |只看该作者
回复 5# nine8
你用32位编译器和64位的编译器分别编译个打印sizeof(char *)的程序,去看看各自的值就知道了.

论坛徽章:
0
8 [报告]
发表于 2010-03-30 17:00 |只看该作者
回复 7# samlumengjun


    恩,果然是,呵呵

  但是其原理是什么呢?

论坛徽章:
0
9 [报告]
发表于 2010-03-30 17:22 |只看该作者
原理就是指针里存放的是什么?是地址.32位系统理论上寻址空间是2^32.所以用4个字节存放地址就行了;64位则是2^64,所以要用8个字节来存放地址.

论坛徽章:
0
10 [报告]
发表于 2010-03-30 19:16 |只看该作者
原理就是指针里存放的是什么?是地址.32位系统理论上寻址空间是2^32.所以用4个字节存放地址就行了;64位则是2 ...
samlumengjun 发表于 2010-03-30 17:22



    那个 32位,64位不是指计算机的数据总线宽度吗?

   地址总线也是一样?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP