工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
楼主: gyCai

关于指针和地址

[复制链接]
发表于 2007-1-14 13:25 | 显示全部楼层
一个字节八位拉!
不然怎样说??
#17又说
指针的类型应该说是字(非字节),它的长度是计算机的字长

难道不是这样吗?
回复

使用道具 举报

发表于 2007-1-14 15:43 | 显示全部楼层
对哦,四八三十二
回复

使用道具 举报

发表于 2007-1-14 22:52 | 显示全部楼层
指针是一种复合的数据类型.
指针包含了本身的值和所指向的物.
本身的值就是一个内存地址.
我们说int *p;char *p;这些,其实就是一个指向int整的指针,一个指向char整的指针.
它的值是一个地址,这个地址里只能放int ,char类型的数据.
本质上,指针是一个内存地址,而对应的数据类型的存放,则是编译器检查的.
我是这样理解的.请拍砖.
回复

使用道具 举报

发表于 2007-1-14 22:56 | 显示全部楼层
楼主想了解的就是编译器对指针的处理……

楼上好多都理解错了楼主的意思。。
回复

使用道具 举报

发表于 2007-1-14 22:57 | 显示全部楼层
它的size是与机器字长相关的.
32位机器应该是4
所以
char *p=(char*)malloc(100));
sizeof(p)应该是4 ...
回复

使用道具 举报

发表于 2007-1-14 23:04 | 显示全部楼层
/*假设指针是这样的结构体*/

typedef struct _pointer
{
        int address;
        char type;
        char others;
}Pointer;

int main()
{
Pointer p;
p.address=4656;
p.type='a';
p.others='x';
printf("%d",p);
system("pause");
return 0;
}
输出结果为:4656

对我们来说,指针只有address成员,而实际上还有类型值type等。
不知这样理解,可不可以?
回复

使用道具 举报

 楼主| 发表于 2007-1-15 11:06 | 显示全部楼层
如果说,指针里面的指向地址的域是int类型的话,就有点儿明白了。
楼上的应该加上如下:
...
char others;
functions:
add(pointer+i)  ::= pointer.address+i*sizeof(pointer);
comp(pointer,NULL) ::=if(pointer==0) return 1;
                                           else return 0;
...
...
回复

使用道具 举报

发表于 2007-1-15 13:34 | 显示全部楼层
楼上,我们的假设还像模像样,但实际上可能完全不是这么回事。
要去哪找答案呢?
回复

使用道具 举报

 楼主| 发表于 2007-1-15 14:07 | 显示全部楼层
回楼上的:就是因为不知道去哪儿找,所以贴出来讨论......
唉~~~
回复

使用道具 举报

发表于 2007-1-16 22:16 | 显示全部楼层
原帖由 hjack 于 2007-1-14 22:57 发表
它的size是与机器字长相关的.
32位机器应该是4
所以
char *p=(char*)malloc(100));
sizeof(p)应该是4 ...

为什么我在32位处理器的机上和64位处理器的机上运行
char *p=(char*)malloc(100));
sizeof(p)
得到的结果都是4?
回复

使用道具 举报

发表于 2007-1-16 23:25 | 显示全部楼层
应该不是CPU的问题,而是运行环境的问题
如果你在VISTA 下应该会有不同的结果。。。
回复

使用道具 举报

发表于 2007-1-17 00:04 | 显示全部楼层
o!那我得找部vista才行!
我得的机用不了vista
回复

使用道具 举报

发表于 2007-1-17 01:33 | 显示全部楼层
刚刚搜了下

貌似VISTA  XP 都有32BIT  和 64BIT 版本的...
回复

使用道具 举报

发表于 2007-1-17 01:44 | 显示全部楼层
难道说硬件是64位的,系统也是64位的,才可以运行出指针长度为8?
回复

使用道具 举报

发表于 2007-1-17 02:03 | 显示全部楼层
32位硬件可以运行64位系统吗? - -#
回复

使用道具 举报

发表于 2007-1-17 02:10 | 显示全部楼层
64位硬件可以运行32位系统吗? - -#
回复

使用道具 举报

发表于 2007-1-17 02:13 | 显示全部楼层
可以...
回复

使用道具 举报

发表于 2007-1-17 12:28 | 显示全部楼层
64bit硬件可以向下兼容32bit的操作系统
但是32bit的硬件应该跑不起64bit的操作系统
回复

使用道具 举报

 楼主| 发表于 2007-1-17 13:41 | 显示全部楼层
32bit的硬件绝对跑不起64bit的系统!
指针的长度应该是跟硬件和系统环境都有关。
回复

使用道具 举报

发表于 2007-1-23 02:17 | 显示全部楼层
LS的说得有道理....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-8-31 04:23

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表