不然怎样说??
#17又说指针的类型应该说是字(非字节),它的长度是计算机的字长
难道不是这样吗? 对哦,四八三十二
指针是一种复合的数据类型.
指针包含了本身的值和所指向的物.
本身的值就是一个内存地址.
我们说int *p;char *p;这些,其实就是一个指向int整的指针,一个指向char整的指针.
它的值是一个地址,这个地址里只能放int ,char类型的数据.
本质上,指针是一个内存地址,而对应的数据类型的存放,则是编译器检查的.
我是这样理解的.请拍砖. 楼主想了解的就是编译器对指针的处理……
楼上好多都理解错了楼主的意思。。 它的size是与机器字长相关的.
32位机器应该是4
所以
char *p=(char*)malloc(100));
sizeof(p)应该是4 ... /*假设指针是这样的结构体*/
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等。
不知这样理解,可不可以? 如果说,指针里面的指向地址的域是int类型的话,就有点儿明白了。
楼上的应该加上如下:
...
char others;
functions:
add(pointer+i)::= pointer.address+i*sizeof(pointer);
comp(pointer,NULL) ::=if(pointer==0) return 1;
else return 0;
...
... 楼上,我们的假设还像模像样,但实际上可能完全不是这么回事。
要去哪找答案呢? 回楼上的:就是因为不知道去哪儿找,所以贴出来讨论......
唉~~~ 原帖由 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? 应该不是CPU的问题,而是运行环境的问题
如果你在VISTA 下应该会有不同的结果。。。 o!那我得找部vista才行!
我得的机用不了vista 刚刚搜了下
貌似VISTAXP 都有32BIT和 64BIT 版本的... 难道说硬件是64位的,系统也是64位的,才可以运行出指针长度为8? 32位硬件可以运行64位系统吗? - -# 64位硬件可以运行32位系统吗? - -# 可以... 64bit硬件可以向下兼容32bit的操作系统
但是32bit的硬件应该跑不起64bit的操作系统 32bit的硬件绝对跑不起64bit的系统!
指针的长度应该是跟硬件和系统环境都有关。 LS的说得有道理....
页:
1
[2]