大神们,刚开始学习c++的指针模块。然后碰到这么个问题。如下:
代码:
#include <iostream>
using namespace std;
int main()
{
int y = 1;
int * numptr = & y;
cout << numptr << endl;
cout << &numptr << endl;
return 0;
}
然后得到以下结果
所以请教,&numptr的意义是什么啊?是储存 指针地址 的 地址么?
或者请大神解释一下两个东西。谢谢啦
ããæéåéå°±æ¯ä¸ä¸ªåéï¼è¿ä¸ªåéæ¬èº«è¦åå¨å¨å åä¸ï¼æéåéæå¨å åä¸åå¨çå°±æ¯è¿ä¸ªæéåéææåçå°åï¼
ããæåæéçæéåéï¼æ¬èº«ä¹æ¯æéåéï¼æ¤åéæåçå°åä¸åå¨çè¿æ¯å°åï¼
ããä¾å¦ç»ç代ç ä¸ï¼pæ¯æéåéï¼*p表示pä¸åå¨çå°åææåå å空é´;**a=&p表示æpè¿ä¸ªæéåéæå¨çå°åä¼ éç»aï¼
ããè¥ i æå¨å åå°åç¼å·ä¸ºx1004;pæå¨å åå°å为x1100;aæå¨å åå°å为x1200ï¼
ããåp=&i表示å§x1004è¿ä¸ªå°ååå°pæå¨çx1100å åä½ç½®ä¸ï¼
ããa=&på§x1100è¿ä¸ªå°ååå°aæå¨çx1200å åä½ç½®ä¸ã
在32位环境下,【指针变量】就是一个32位数,它的值表示一个内存地址,但它本身也是存储在内存中的,
【指针变量】的地址就是这个【指针变量】的本身所在的内存地址追问
在转到 引用调用了。比如说,int a = 1; int &y = a; 那这里边y代表的是什么呢。
追答y代表a的一个别名,意思就是其实它们是同一个东西
int a = 1;int &y = a;
a = 2;
printf("%d", y); // 输出2追问
再问一下哈,就是说引用调用和指针是完全不一样的体系么?或者有别的理解?比如说可以把y理解成一种地址或者什么的?还是只能理解成是a的一个别名呀?
追答不一样,引用调用你可以理解为就是同一个东西,只不过你给它起了两名字而已,编译器编译以后就没有区别了。
但是指针不一样,指针是一个变量,是一个32位数(32位环境),这个数代表一个地址 就是指针指向的对象的地址
所以 指针对象是存放在内存中的一个变量 可以分配在堆中 也可以分配在栈中
但引用对对象不是,只是你给已有的变量起了一个别名 不会在内存中占空间 , 编译器编译之后会直接寻址找到对象的
int a = 1;int &y = a;
a = 2;
int* p = &a;
int* q = &y;
printf("%d 0x%x 0x%x\n", y, p, q); // 可以看到 p和q输出的是一样的本回答被提问者采纳
首先
int * numptr这个操作分配了一个房间号并给你钥匙,但是房间里面没放任何东西。
numptr = & y;这个操作是用钥匙打开这个房间并往这个房间里面放上另外一个房间的钥匙,这么说不知道你懂了没?
追问转到 引用调用了。比如说,int a = 1; int &y = a; 那这里边y代表的是什么呢。
储存 “指针地址” 的 地址就是二级指针了。
int num = 0x1111;int *pPtr = #
int **ppPtr = &pPtr;
希望对你有帮助。
追问那我想问一下,关于引用调用这块的。比如说,int a = 1; int &y = a; 那这里边y代表的是什么呢?
追答int &y = a这样写是不对的,应该是int *y = &a;y代表的是一个指针指向变量a(y存的是变量a的地址);
总而言之,只要是变量,就有自己的地址,用&即可得到该变量的地址。至于变量存储的内容则依情况而定。追问
那不明白引用调用了。比如说,int a = 1; int &y = a; 那这里边y代表的是什么呢
追答y为a的引用,也可以说是别名,所以y就是a,具有相同的地址,即:&y == &a。对y的所有操作等价于直接对a操作。
注意:定义中的&不是取址运算符,它和前面的类型合在一起是一个类型,即引用类型。