关于指针和地址
我们成天讨论指针啊地址啊,有点儿好奇,指针类型数据究竟是什么样的数据?整型?字符型?它可以与整型或者同类型指针相加减,却不可以与其它类型作此运算。
还有就是在C语言编译器里面地址究竟被映射成什么类型的数据?
知道的说说。 好像我看过的书上说
实际上指针保存的不只是地址的整数值,还包括该指针的一些其它信息,
如该指针的内容类型(以便于指针做加减操作) 与同类型的指针相加减?貌似不提倡这样做
就像一个家庭门牌号吧
你隔避的门牌号+1就是你家的门牌号,但他家的+你家的=?可能不存在这样的门牌号,可可能指向另一个省的某一户人家 请诸位不要觉得幼稚,其实这个问题很久之前就开始使我觉得迷惑了。
我知道,编译器对每一种数据类型都定义了对其上的操作,但是,好像
从来没有看过对指针类型和地址方面的结构定义。
望各位不吝赐教。 觉得指针只是一个指向吧。
你定义甚么类型都可以指向它,但是它指向的应该是内存的地址。 这个应该是编译器内部的事,初学指针时我也很想知道,后来知道了2,3楼的知识就“满足”了
这个应该是编译器内部实现的问题,和C++的对象模型是同一类问题吧?
图书馆有本《C++对象模型深入探索》楼主可以去看看 我也觉得应该是对象模型那类问题,就是想知道它究竟是怎么定义的。
还有就是地址被映射成什么类型的数据。
呵呵.
[ 本帖最后由 gyCai 于 2007-1-12 17:25 编辑 ] 对象模型?
C++就这样说,C也说对象吗?
如2#所说”实际上指针保存的不只是地址的整数值,还包括该指针的一些其它信息”,C的指针是一个结构体吧? 如楼上所说,C里面并不说对象.我只是把结构体也列入ADT理解,这样虽然不正确,但当初却有助于我理解此概念. 看编译原理去。。
我觉得是存储整型数据,不过这种数据的意思是内存地址。。 #include<stdio.h>
void main(){
int a={1,2};
printf("%d",a);
} 楼上所举的例子,相信楼主已经非常熟悉了。
楼主认为指针并不只是如楼上打印出来的地址值,它还隐含了其它信息,如类型。 是的,楼上正确理解了我的意思. 指针不包括类型信息。。
比如我们定义了一个变量
int a;
编译的过程中,以后出现过a的地方都会返回这命令处,找到地址和类型信息(我是这样理解的)。其实指针就是指向一个存储单元的地址,请问一个存储单元的数据都是二进制信息。 简单的说。。。就是。。
一个程序的命令会存储进内存(只存储类型和变量,CPU鬼知道怎么处理)。。
当然了,这也包括类型定义的命令了。。 其实楼主就是想知道内部实现的细节。。。 指针的类型应该说是字(非字节),它的长度是计算机的字长 ls,请问可以用以下方法来求指针的长度吗?
int *p;
printf("%d",sizeof(p));
[ 本帖最后由 Ja5oN 于 2007-1-14 13:02 编辑 ] 我在学校的实验楼机房里试了一下
结果是4
是不是表示该电脑的字长是4*8=32位啊? 指针长度为4个字节没错,但楼上乘以8,然后说32位,说不通吧
页:
[1]
2