工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 2947|回复: 39

关于指针和地址

[复制链接]
发表于 2007-1-12 16:59 | 显示全部楼层 |阅读模式
我们成天讨论指针啊地址啊,有点儿好奇,指针类型数据究竟是什么样的数据?整型?
字符型?它可以与整型或者同类型指针相加减,却不可以与其它类型作此运算。
还有就是在C语言编译器里面地址究竟被映射成什么类型的数据?
知道的说说。
发表于 2007-1-12 17:02 | 显示全部楼层
好像我看过的书上说
实际上指针保存的不只是地址的整数值,还包括该指针的一些其它信息,
如该指针的内容类型(以便于指针做加减操作)
回复

使用道具 举报

发表于 2007-1-12 17:04 | 显示全部楼层
与同类型的指针相加减?貌似不提倡这样做
就像一个家庭门牌号吧
你隔避的门牌号+1就是你家的门牌号,但他家的+你家的=?可能不存在这样的门牌号,可可能指向另一个省的某一户人家
回复

使用道具 举报

 楼主| 发表于 2007-1-12 17:05 | 显示全部楼层
请诸位不要觉得幼稚,其实这个问题很久之前就开始使我觉得迷惑了。
我知道,编译器对每一种数据类型都定义了对其上的操作,但是,好像
从来没有看过对指针类型和地址方面的结构定义。
望各位不吝赐教。
回复

使用道具 举报

发表于 2007-1-12 17:10 | 显示全部楼层
觉得指针只是一个指向吧。
你定义甚么类型都可以指向它,但是它指向的应该是内存的地址。
回复

使用道具 举报

发表于 2007-1-12 17:10 | 显示全部楼层
这个应该是编译器内部的事,初学指针时我也很想知道,后来知道了2,3楼的知识就“满足”了 
这个应该是编译器内部实现的问题,和C++的对象模型是同一类问题吧?
图书馆有本《C++对象模型深入探索》楼主可以去看看
回复

使用道具 举报

 楼主| 发表于 2007-1-12 17:20 | 显示全部楼层
我也觉得应该是对象模型那类问题,就是想知道它究竟是怎么定义的。
还有就是地址被映射成什么类型的数据。
呵呵.

[ 本帖最后由 gyCai 于 2007-1-12 17:25 编辑 ]
回复

使用道具 举报

发表于 2007-1-12 18:35 | 显示全部楼层
对象模型?
C++就这样说,C也说对象吗?

如2#所说”实际上指针保存的不只是地址的整数值,还包括该指针的一些其它信息”,C的指针是一个结构体吧?
回复

使用道具 举报

 楼主| 发表于 2007-1-12 21:59 | 显示全部楼层
如楼上所说,C里面并不说对象.我只是把结构体也列入ADT理解,这样虽然不正确,但当初却有助于我理解此概念.
回复

使用道具 举报

发表于 2007-1-12 23:46 | 显示全部楼层
看编译原理去。。

我觉得是存储整型数据,不过这种数据的意思是内存地址。。
回复

使用道具 举报

发表于 2007-1-12 23:49 | 显示全部楼层
#include<stdio.h>
void main(){
        int a[2]={1,2};
        printf("%d",a);
}
回复

使用道具 举报

发表于 2007-1-13 00:41 | 显示全部楼层
楼上所举的例子,相信楼主已经非常熟悉了。

楼主认为指针并不只是如楼上打印出来的地址值,它还隐含了其它信息,如类型。
回复

使用道具 举报

 楼主| 发表于 2007-1-13 01:24 | 显示全部楼层
是的,楼上正确理解了我的意思.
回复

使用道具 举报

发表于 2007-1-13 11:33 | 显示全部楼层
指针不包括类型信息。。

比如我们定义了一个变量
int a;
编译的过程中,以后出现过a的地方都会返回这命令处,找到地址和类型信息(我是这样理解的)。其实指针就是指向一个存储单元的地址,请问一个存储单元的数据都是二进制信息。
回复

使用道具 举报

发表于 2007-1-13 11:36 | 显示全部楼层
简单的说。。。就是。。

一个程序的命令会存储进内存(只存储类型和变量,CPU鬼知道怎么处理)。。
当然了,这也包括类型定义的命令了。。
回复

使用道具 举报

发表于 2007-1-13 12:39 | 显示全部楼层
其实楼主就是想知道内部实现的细节。。。
回复

使用道具 举报

发表于 2007-1-13 14:37 | 显示全部楼层
指针的类型应该说是字(非字节),它的长度是计算机的字长
回复

使用道具 举报

发表于 2007-1-14 12:55 | 显示全部楼层
ls,请问可以用以下方法来求指针的长度吗?
int *p;
printf("%d",sizeof(p));

[ 本帖最后由 Ja5oN 于 2007-1-14 13:02 编辑 ]
回复

使用道具 举报

发表于 2007-1-14 13:01 | 显示全部楼层
我在学校的实验楼机房里试了一下
结果是4
是不是表示该电脑的字长是4*8=32位啊?
回复

使用道具 举报

发表于 2007-1-14 13:21 | 显示全部楼层
指针长度为4个字节没错,但楼上乘以8,然后说32位,说不通吧
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-15 22:25

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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