指针对指针的意义是什么
What is the significance of a pointer to a pointer?
这样做有什么区别:
int i = 5, j = 6, k = 7;
int *ip1 = &i, *ip2 = &j;
int *ipp = ip1;
这样做:
int **ipp2 = &ip1;
他们不是做同样的事情吗?持有一个指向变量i的指针(ip1)?
ipp2
指向ip1
。这与指向i
完全不同。
样本代码:
int *ip1 = &i;
int **ipp2 = &ip1;
printf("%dn", **ipp2); // 5
ip1 = &j;
printf("%dn", **ipp2); // 6
所有变量在内存中都有一个保存其值的位置。让我们探讨i
、ip1
、ipp
和ipp2
值之间的关系
这是在执行语句i = 5;
时得到的结果。CCD_ 9在存储器中具有其位置,并且该位置处的值被设置为CCD_。
i -> +--------+
| 5 |
+--------+
^
|
A1 (address of i)
这是在执行语句int* ip1 = &i;
时得到的结果。ip1
在内存中有其位置,并且该位置的值被设置为i
的地址,我们将其指定为A1
。
ip1 -> +--------+
| A1 |
+--------+
^
|
A2 (address of ip1)
这就是在执行语句int* ipp = ip1;
时发生的情况。ipp
的存储位置处的值被设置为ip1
的值,即A1
。
ipp -> +--------+
| A1 |
+--------+
^
|
A3 (address of ipp)
这就是在执行语句int** ipp2 = &ipp;
时发生的情况。在ipp2
的存储器位置处的值被设置为A3
,它是"ip1"的地址。
ipp2 -> +--------+
| A3 |
+--------+
^
|
A4 (address of ipp2)
取消引用是如何工作的:
*ip1 = *A1 = 5
*ipp = *A1 = 5
*ipp2 = *A3 = A1
**ipp2 = **A3 = *A1 = 5
指针通常用于更改函数内变量的值:
void incr(int *ip) { *ip++; }
void f() { int i = 0; incr(&i); printf("%dn", i); // 1
现在,用一个指针指向一个指针也没什么不同。您可以将指针传递给指向函数的指针,该函数可以更改指针指向的内容:原始指针
char *mom = "mom";
char *pop = "pop";
chooseMomOrPop(int choosePop, char **momOrPop) { *momOrPop = choosePop ? pop : mom; }
void f() { char *mp = mom; chooseMomOrPop(1, &mom); printf("%sn", mom); } // pop
非常简单:指针是变量留在内存中的地址。由于指针本身就是一个变量,它的地址可以存储在另一个指针中,依此类推。为了更好地了解指针是什么以及它是如何工作的,只需认为它是一个地址即可。指针的类型,即int *
中的int
,是指所指向数据的类型,并影响指针对加法或减法的"反应",如指针算术中所述。"指向int指针的指针"是int**
,因此总是指向int*
的地址,并且当递增时,它会将地址移动到所需的字节数,以指向下一个int*
相关文章:
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 使用基类指针调用基类的值构造函数的语法是什么?
- C++:Lambda 函数指针转换的用例是什么?
- C++关于指针和使用函数将它们启动到堆的行为究竟是什么?
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 为什么此指针值不能转换为整数的规则是什么?
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- 回调和函数指针是什么关系
- 带有'this'的空指针是什么意思?
- 将对象传递给将创建它的函数时,要使用的合适的智能指针是什么
- 与自定义分配器一起使用的最佳唯一指针是什么
- 检测"内存泄漏"时,瓦尔格林德的真实指针是什么?
- 类指针*是什么意思
- 指向指针的指针是什么意思
- c语言中的远函数指针是什么,它的语法是什么
- 与指针向量一起使用的最佳智能指针是什么
- a=&*A 在 C++(其中 A 是指针)是什么意思?
- C++中的富指针是什么