Sea*_*ill 5 c++ memory pointers
我有几个问题。这不是家庭作业。我只是想更好地理解。
所以如果我有
int * b = &k;
那么k必须是一个整数,并且是一个指向内存中位置的b指针,对吗?k
的底层“数据类型”是什么b?当我输出它时,它返回类似的东西0x22fe4c,我认为它是内存位置的十六进制2293324,对吗?
内存位置“2293324”到底在哪里?“堆”?例如,如何输出内存位置0、1、2等处的值?
如果我输出*b,这与直接输出相同k,因为*某种程度上意味着 指向的值b。但这似乎与声明的不同b,它被声明int * b = k,所以如果*意味着“值”那么并不意味着这个“声明b为值” k?我知道它没有,但我仍然想确切地理解这意味着语言明智的。
如果我输出&b,这实际上是返回指针本身的地址,与 无关k,对吗?
我也可以做int & a = k;这看起来与做相同的事情int a = k;。一般情况下是不需要&这样使用的吗?
1-是的。
2-没有“底层数据类型”。它是一个指向 int 的指针。这就是它的本质。它的数据类型与 c/c++ 的“int”或“char”相同。
3-您甚至不应该尝试不是由您分配的内存的输出值。这是一个分段错误。您可以尝试执行 b-- (这使得“b”指向实际位置之前的“int”。至少,您的程序认为它是一个 int。)
4- * 带指针是一个运算符。对于任何数据类型,它都是另一种数据类型。它就像 = 符号。当你输入 == 时它有一个含义,当你输入 = 时它有另一个含义。该符号不一定与其含义相关。
5-&b是b的方向。它与k相关,而b指向k。例如,如果执行 (**(&b)),则您将得到 b 方向所指向的值所指向的值。这是 k。当然,如果你没有改变的话。
6-int & a = k表示将a的方向设为k的方向。a无论如何,将是 k。如果 a=1,k 将为 1。它们都将引用同一事物。
当然,欢迎更正。我就是这么理解的。
| 归档时间: |
|
| 查看次数: |
13155 次 |
| 最近记录: |