当前位置: 代码迷 >> C语言 >> 请教个指针的问题
  详细解决方案

请教个指针的问题

热度:47   发布时间:2007-11-26 15:51:04.0
我也觉得指针比较难明白啊~~
----------------解决方案--------------------------------------------------------
指针不难明白啊。
----------------解决方案--------------------------------------------------------
还是有点模糊啊``````

静思````int *``类型的指针````怎么用汉语说啊````

静思``如果在32上```int 类型占2个字节```int *p``后``

要p=&a;

p要占4个字节把````那么&a后``得到一个地址应该还是4个字节吧```但是这4个字节是int的第一个
内存单元还是第2个内存单元啊```

上面还有个人说的``但是看不懂```
----------------解决方案--------------------------------------------------------
原帖由 [bold][underline]死了都要C[/underline][/bold] 于 2007-11-26 19:16 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1115930&ptid=188450][/url]
还是有点模糊啊``````

静思````int *``类型的指针````怎么用汉语说啊````

静思``如果在32上```int 类型占2个字节```int *p``后``

要p=&a;

p要占4个字节把````那么&a后``得到一个地址应该还是4个字节吧```但是这4 ...



int *p =&a;
还有什么不明白的。
p  指向的是int 数据。 /* 使用 *p 只能得到一个int 数据 */

别忘了指针本身也是有数据类型的。

//
----------------解决方案--------------------------------------------------------
我现在不明白的是```地址是怎么取出并放到指针变量里的```

比如``int a``给a分配2个内存单元```单元1和单元2是连续的``分别有一个地址``

当我们&a后``取的是 单元1 的地址 还是 单元2 的地址``??



然后``int *p``p是用来存放地址的`

静思说   指针本身占的内存即是指针变量的地址  指针在32位机器下所占内存的大小均为4个字节

         sizeof(int *)=sizeof(char *)=4  

意思就是说``在32位机下``每个 内存单元的地址 都是一个为32位(占4个字节)的数``
因为地址要放在这个32位的内存里``
单元1和单元2的地址都占32个位``

结合上面``&a后``得到的地址就是一个32个位的数``然后把它放到占了32个位的指针变量p里面``
但是取的是哪个单元的地址呢``


主要搞清楚3个问题``

1.  在内存中``每一个内存单元的地址``是一个多少位的数或者说要占多少个位``?

2.  指针变量存放的是地址``那么它存放的是一个内存单元的地址还是多个内存单元的地址``?

3.  都知道char只占一个字节``即一个内存单元``取其地址就取了这个内存单元的地址``
    但是其他类型就不只是占一个内存单元了```那么取其地址``又是取的那个单元的地址?
----------------解决方案--------------------------------------------------------
怎么没有高手继续解释了   关注中..................
----------------解决方案--------------------------------------------------------
LZ问得有点深了,关注中~
----------------解决方案--------------------------------------------------------
我认为在学习指针的时候只要把* 和 &搞懂了就很好解决
----------------解决方案--------------------------------------------------------
指针也是变量  占了一个内存单元  一般我们都用32位的吧     lz这边把应该是内存单元搞错了
char是一个字节没错 也要用一个内存单元来存放它  但char只占了1/4个单元   而double占了两个内存单元  指针存放的是这两个内存单元的第一个  然后编译器再根据指针类型决定取多少位  我是这样理解的
----------------解决方案--------------------------------------------------------
指针根据所指变量的类型,可以确定它所覆盖的范围。。
也就是说,如果int i=0; // i的内存占4字节,便有四个地址
    int * ptr=&i;  //ptr指向i,所以ptr存放了i的首地址,并根据ptr所指的类型,确定了ptr覆盖的范围,即ptr实际覆盖了i的所有地址.....
----------------解决方案--------------------------------------------------------
  相关解决方案