| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1977 人关注过本帖
标题:刚学,感觉很无助,请各位大神不要嫌弃我,帮帮我
只看楼主 加入收藏
异ren
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2016-2-2
结帖率:50%
收藏
 问题点数:0 回复次数:3 
刚学,感觉很无助,请各位大神不要嫌弃我,帮帮我
# include<iostream>
using namespace std;
int main()
{
    int add=3;
    int *p=&add;
    cout<<add<<'\t'<<p<<'\t'<<&p<<endl;
    return 0;
}//为什么p和&p不一样呢,就是说输出的结果不一样,难道p是地址,&p是地址的地址吗?地址也有地址的吗
2016-02-03 09:55
九天冥盟
Rank: 2
等 级:论坛游民
威 望:1
帖 子:77
专家分:20
注 册:2015-7-14
收藏
得分:0 
*p是指针变量,指针变量p储存的其他变量的地址,而&P代表指针变量自己的地址,通过*P可以调用被储存变量地址中的数值;即*P等价于add;
2016-02-03 11:30
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
收藏
得分:0 
详细研究自己看操作系统原理。

一个变量有两部分组成,在内存里分成程序编码部分和运行部分,就是堆和栈。
简单点说就是系统加载exe后,把exe所有编码转换成机器码存放在内存里,这部分就是变量名,它有一个名字,或者说一个标签指向另外一个地址。(exe转换成机器码后是不会改变的,改变的是内容部分的区域)
而变量内容部分在另一个内存区域,它和名字是分开的。比如你定义一个结构或者数组,他们之间的内容部分是连在一起的,而不是中间夹杂名字。
当你重新改变某个变量的时候,操作系统会查询变量名字,然后再转到内容区域去修改。

这样一来,指针是可以修改的,它可以改变指向的地址,但在exe机器编码内部它的名字叫p,写程序的时候当然是呼叫p,当下面有呼叫p的时候系统肯定是先查询有没有p这个名字,然后才去查询它的值,发现是指针不是变量,然后按照指针方式处理,然后巴拉巴拉巴拉。。。。。。


嗯。。。为什么系统要把执行代码和内容代码分开来放?实际上解决一个很简单的问题,就是动态内存,每个系统都可以设置内存增长大小(一般是4k,设置过小消耗cpu,过大浪费内存,比如一次new一个char但增加了16k内存)
详情还是自己看操作系统原理的书
2016-02-03 11:41
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
将*p,p和&p输出比对,多接触几次慢慢就明白了。自己悟出的比听人解答的理解更加深入。
2016-02-03 12:00
快速回复:刚学,感觉很无助,请各位大神不要嫌弃我,帮帮我
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022483 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved