| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1962 人关注过本帖
标题:请教大神,关于c++指针的问题
只看楼主 加入收藏
tt138
Rank: 2
等 级:论坛游民
威 望:1
帖 子:16
专家分:17
注 册:2019-4-19
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
请教大神,关于c++指针的问题
// use_new.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include "pch.h"
#include <iostream>

int main()
{
    using namespace std;
    int nights = 1001;
    int * pt = new int;
    *pt = 1001;
    cout << "nights value=";
    cout << nights << ":location=" << &nights << endl;
    cout << "int";
    cout << "value=" << *pt << ":pt location=" << pt << ":&pt location="<<&pt<< endl;
    double *pd = new double;
    *pd = 10000001.0;
    cout << "double";
    cout << "value=" << *pd << ": pd location=" << pd << ":&pd location=" << &pd<<endl;
    cout << "loction of point pd:" << &pd << endl;
    cout << "size of pt=" << sizeof(pt);
    cout << ":size of *pt=" << sizeof(*pt)<<endl;
    cout << ":size of pd=" << sizeof pd;
    cout<<":size of *pd=" << sizeof(*pd)<<endl;
    cout << ":size of &pd=" << sizeof &pd << endl;
    return 0;
}

图片附件: 游客没有浏览图片的权限,请 登录注册

这个程序是《c++ primer plus》第6版第103页程序清单4.17 use_new.cpp
pt pd 是指针, ":pt location=" << pt << ":&pt location="<<&pt,
              ": pd location=" << pd << ":&pd location=" << &pd
显示了4个地址,4个地址都不一样。pt pd的地址与&pt &pd的地址还不在同一个内存块。
pt是指针,显示的是地址,&pt是什么东西?显示的也是地址,与pt的还不一样。
pd也是指针,&pd和&pt一样,表示的是什么?地址的地址?&pt与&pd究竟是什么意思?请大神指点一下。




[此贴子已经被作者于2019-4-24 03:52编辑过]

搜索更多相关主题的帖子: 指针 cout location sizeof 地址 
2019-04-24 03:26
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:14 
你有一张纸条,名叫pt,纸条上写着“东经115.12,北纬21.23”。
那么 cout << pt; 输出的是“东经115.12,北纬21.23”
而 cout << &pt; 输出的是这张纸条本身的地址,比如“东经88.51,北纬29.16”

int* pt = new int;
就是定义了一个类型为int*的变量pt,pt的值是一个类型为int的对象的地址。
照你图中所示的话,那就是:在内存0032F730处有个pt,而pt记录着一个地址009FABB8,这个地址009FABB8处存着int类型的值1001。
0032F730: 009FABB8
……
009FABB8:1001
2019-04-24 08:41
tt138
Rank: 2
等 级:论坛游民
威 望:1
帖 子:16
专家分:17
注 册:2019-4-19
收藏
得分:0 
2楼这么解释可以理解&pt是指针自己的地址,对100页上的那个图把指针指向一个1006内存块然后转向1000内存块,一直看不懂,这么理解就看懂了。
但根据教科书说,内存块就象个硬币一样有两面,既然有地址,那这个地址上有什么东西?即使没东西也应该有个空符或零(0)吧,
*pt是指向内存块数据,pt是指向内存块地址,&pt是指针自己的地址,&pt地址上有什么?那*&pt是不是这个内存块上的东西?
 

use_1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include "pch.h"
#include <iostream>

int main()
{
    using namespace std;
    int * pt = new int;
    *pt = 1001;
    cout << "int";
    cout << "value=" << *pt << endl<<endl;
    cout << " :pt location=" << pt << " :&pt location=" << &pt << endl << endl;;
    cout<<" :*&pt location=" << *&pt << endl;
    delete pt;
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册

结果*&pt==pt,**&pt也是==pt,都是别人的地址,(int*)&pt==&pt,(int*)*&pt==pt,都是地址,就是没有值。
用**pt查找,编译提示“非法的间接寻址”不让通过。
&pt内存块上究竟有什么?怎么查找?还是指针存放特点与变量的有什么特别不一样?查教科书没找到明确说明这特性,还请大神指点。

[此贴子已经被作者于2019-4-24 11:16编辑过]

2019-04-24 10:38
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
听不懂你问什么
就拿
0032F730: 009FABB8
……
009FABB8:1001
来举例
pt的地址是 0032F730
pt的值是 009FABB8
地址 009FABB8 处存放着int值 1001

&pt 是 0032F730
pt 是 009FABB8
*pt 是 1001
2019-04-24 13:02
tt138
Rank: 2
等 级:论坛游民
威 望:1
帖 子:16
专家分:17
注 册:2019-4-19
收藏
得分:0 
回复 4楼 rjsp
终于听明白了,地址上记录着一个地址,按被记录的地址可以找到一个值。也就是一般的变量是地址上记录着值,只两个值,指针是地址上记录着一个地址,根据记录的地址又可以找到一个值。
这是一对:
&pt 是 0032F730(地址)
pt 是 009FABB8  (被记录的数字)
这是一对:
pt 是 009FABB8  (地址)
*pt 是 1001     (被记录的数字)
感谢大神指点

[此贴子已经被作者于2019-4-25 12:04编辑过]

2019-04-24 15:13
haihkei
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2019-4-27
收藏
得分:0 
指针本身存在一个地址,指针所指向的内容也存在一个地址,&是取地址符,*pt指向内容。
2019-04-27 00:56
快速回复:请教大神,关于c++指针的问题
数据加载中...
 
   



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

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