这将是一个冗长的帖子,所以我提前道歉..但设法要求与语境多个问题:常量和指针
所以,我一直在努力学习C++,和我我一直在相当容易地挑选所有东西,但我习惯于尝试以“稍微不同的方式”与教程一起做事,以确保我了解我正在学习的东西的功能。
我似乎已经碰到了关于常量及其与指针相关的心理障碍。
在上一节,我想我得到了,解引用(以及用于解引用和指针时*之间的差)在引用一个非常坚实的抓地力,然后写了这个代码:
int a[5];
int * p;
p = a;
cout << "Select the value for the first item at address(" << &a[0] << ")" << nl;
cin >> *p;
p++;
cout << "Select the value for the second item at address(" << &a[1] << ")" << nl;
cin >> *p;
p++;
cout << "Select the value for the third item at address(" << &a[2] << ")" << nl;
cin >> *p;
p++;
cout << "Select the value for the fourth item at address(" << &a[3] << ")" << nl;
cin >> *p;
p++;
cout << "Select the value for the fifth item at address(" << &a[4] << ")" << nl;
cin >> *p;
for (int n=0;n<5;n++)
cout << a[n] << "(" << &a[n] << ")" << nl;
现在,我意识到这不一定是最“优化”的解决方案,但是它的工作原理是,我可以“写入”存储在内存中的阵列,并显示更改。它很整洁,就像我说的那样。我认为我对这些事情的工作原理有了很好的理解。
..和然后,我打的下一个部分,它使用的示例:
const char * terry = "hello";
教我,我引用:“作为阵列的情况下,编译器允许特殊情况我们想要在声明指针的同时初始化指针指向常量的内容“(这是在cplusplus.com tutorial上)。
无论如何,去点:为了尝试和与它和上一节自己熟悉,我试着写:
const char * p = "Hello.";
for (int n=0;n<5;n++)
cout << p[n] << "(" << &p[n] << ")" << nl;
cout << nl;
..和这不起作用。我基本上试图复制我以前的代码(尽管没有写作方面),试图读取这个常量数组中每个字符的RAM位置,并且试验了指针,引用,解除引用等的各种可能组合。但我只是从整个“你好”中得到一张印刷品。与& p。
如何在地狱中获得恒定数组的引用?我想我理解的基本前提是我创建一个数组并立即将其分配给内存,然后为第一个块(“H”)的位置分配一个指针(p)..但我似乎无法将块打印出来。我能够得到第一个块打印的位置(不记得我用什么代码来做这件事)并将其绑定到for循环中,但即使如此......它总是打印出第一个区块,即使分配到遵循[n]计数。
我不知道我在想什么,在这里,或者如果我只是想达到“超过我的头”,但也许我只是不明白创建一个数组的用法/以定位其中的每个项目的内存分配..
虽然这带我到我的下一个问题。如何获取char变量的内存位置,无论是否为常量?我一直有问题,与此代码,以及:
char const a = 100;
int * b = &a;
cout << a << nl << *b << nl;
cout << nl;
显然,这并不工作..因为我不能分配b键的位置,因为他们是不同的变量..和显然使得一个char指针是愚蠢的,因为它只是打印乱码/空字符而不是位置(我检查了这一点,显然......不只是假设)。
我希望我只是错过了一个选项,它可能比我目前所处的位置更“先进”......但如果我不是,我不太明白能够做到这一点访问任何类型的变量/常量的块位置,如果由于正在使用的类型的限制而无法访问它们的全部。
这个问题是什么也限制了第三个引用的代码:我不能只是指定一个变量来保存p值,因为它本身必须是一个char兼容的。是没有意义的,因为char不能保存八位数的引用。
你要去看一本小说吗? – 2013-03-20 13:41:46