c++中指针的地址
Address of the pointer in C++
我试图理解指针,我不能得到一件事。例如,
//part of code
int *p;
int tab[3];
那么现在我们有了变量tab
,它包含了数组第一个元素的地址。我想创建一个指向那个指针的指针。因此,我将这样做:
p=&tab;
如果行得通,p
将是tab
的地址(这意味着它将指向tab
)不幸的是,它不起作用。那么如何得到指针本身的地址呢?正确的地址类型是什么?(地址类型*p
)我想指向包含tab
第一个元素地址的内存块,而不是tab
本身。
那么现在我们变量TAB包含数组的第一个元素的地址
不,我们有一个变量tab
, 是数组。
我想创建一个指向这个指针的指针
如果你想要一个指向数组第一个元素的指针,那很容易:数组可以隐式地转换为该指针(这就是为什么人们普遍认为数组是指针,但这是错误的)。
int * p = tab;
如果你想要一个指向数组的指针,而不是指向第一个元素,那么这是另一种类型:
int (*p)[3] = &tab;
但是你通常不会想要这样的事情。
那么如何获得指针本身的地址?
没有指针,所以没有办法得到那个地址。如果你确实有一个指针,那么你就可以获取它的地址,就像任何其他对象一样:
int * p = arr; // Pointer to first element of array
int ** pp = &p; // Pointer to pointer
我想指向包含tab的第一个元素地址的内存块,而不是tab本身。
这没有意义;tab
是包含其元素的内存块
记住数组会衰变成指向第一个元素的指针。所以当你需要一个指向数组的指针时,就按原样使用数组。像
p = tab;
try this
int *p;
int tab[3];
p = &tab[0];
测试这段代码,您将看到p如何直接指向数组的第一个位置,因此您也可以从p访问它的值。
int *p;
int tab[3];
tab[0] = 56;
tab[1] = 57;
tab[2] = 58;
p = tab;
cout << p[0] <<endl;
cout << p[1] <<endl;
cout << p[2] <<endl;
相关文章:
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 将地址分配给本地指针后,公共对象的变量将消失
- 为什么指针不写入类的地址?
- CUDA:统一内存和指针地址的更改
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 如何从绝对地址的 C 样式指针创建对C++对象的引用
- 当我在 C++ 中将派生类的指针分配给指针时,地址会更改
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- 如何在程序集函数中将元素数组作为参数传递时转发 ARM 寄存器的地址指针
- 如何使用构造函数初始化内存地址(指针变量)?
- 数组基础地址指针
- 如何在不使用返回的情况下从函数获取变量的地址(指针)
- 保存QWidgets的地址/指针
- C++ 读取内存地址/指针和偏移量
- 从存储在 CTreeCtrl 的 LPARAM 中的结构中检索地址/指针 (IXMLDOMNode*) - 不起作用
- 简单的C++地址/指针澄清
- 如何获取成员函数的地址指针
- 当“按引用传递”成为强制传递而不是按地址/指针传递时
- C++ 为什么不是同一个地址(指针)