“双指针有时也用于通过引用传递指向函数的指针” 有人可以向我解释上述语句,指向通过引用方式?双指针有时也用于通过引用来传递指向函数的指针
回答
我相信这个例子使得它更清晰:
您的示例不需要双指针,也不使用函数指针。 – 2010-10-08 06:38:59
这只是为了说明双指针如何工作。这个问题不是关于函数指针的,因此它不会涵盖它。 – Naveen 2010-10-08 06:39:48
对不起,我误解了这个问题。如果你稍微编辑你的答案,我可以取消我的-1,否则它说我的投票被锁定在:( – 2010-10-08 07:00:22
这意味着你有一个函数需要一个指针指针(例如输入int **
)。这允许你修改指针(指向哪个数据)的方式,通过引用指针允许传递指针。
void change (int *p) {*p = 7;}
void Really_Change (int **pp) {*pp = null;}
int p = 1;
int *pp = &p;
// now, pp is pointing to p. Let's say it has address 0x10;
// this makes a copy of the address of p. The value of &p is still 0x10 (points to p).
// but, it uses that address to change p to 7.
change(&p);
printf("%d\n", p); // prints 7;
// this call gets the address of pp. It can change pp's value
// much like p was changed above.
Really_Change(&pp);
// pp has been set to null, much like p was set to 7.
printf("%d\n", *pp); // error dereference null. Ka-BOOM!!!
所以,你可以传递一个指向int
并更改该值以同样的方式,你可以传递一个指针的指针并改变其值(改变它所指向。)
只是为了澄清英语语法...没有指向函数的指针;该函数是接收指向任意类型指针的指针。 – Potatoswatter 2010-10-08 06:01:21
'cout << * pp << endl; //打印1;' 我认为它会打印'7'。 – Hemant 2010-10-08 06:44:19
@Hemant:是的,我想我错过了编辑。谢谢。 – JoshD 2010-10-08 06:47:02
我会尝试用代码和简单的英语:)来解释。解释可能会很长,但这将是值得的。
假设我们有一个程序,运行它的main()函数,然后我们调用另一个需要参数int
的函数。
从概念上讲,当你将一个变量作为参数传递给一个函数时,你可以这样做(粗略地说)两种方式:按值或通过引用。
“按值”是指给函数一个变量的副本。该函数将接收其“内容”(值),但它不能将实际变量更改到其自己的代码体外,因为它只有一个副本。
另一方面,“通过引用”意味着给函数提供变量的实际内存地址。使用它,函数可以找出变量的值,但它也可以到达指定的地址并修改变量的内容。
在我们的C程序中,“按值”意味着通过int
的副本(仅以int
作为参数),“通过引用”表示将指针传递给它。
让我们看到一个小的代码示例:
void foo(int n) {
n = 10;
printf("%d\n", n);
}
int main() {
int n = 5;
foo(n);
printf("%d\n", n);
return 0;
}
什么将这个程序的输出是什么? 10 10
?不。 10 5
!因为我们通过了int
的副本,按价值而不是参照,foo()
只修改了存储在其副本中的号码,无法达到main()
的副本。现在
,如果我们这样来做:
void foo(int* n) {
*n = 10;
printf("%d\n", *n);
}
int main() {
int n = 5;
foo(&n);
printf("%d\n", n);
return 0;
}
这次我们引用了foo()
我们的整数:它是实际的内存地址。 foo()
具有完全的权力,通过访问它在内存中的位置来修改它,foo()
和main()
正在使用相同的副本,因此输出将是10 10
。
正如你所看到的,指针是一个引用,... ,但也是一个在内存中的数字位置。它类似于int
,只有内部包含的数字被解释为不同。想想这样:当我们通过引用传递int时,我们通过值传递一个int指针!。因此,值/参考逻辑可以应用于指针,即使它们已经是引用。
如果我们的实际的变量不是一个整数,而是一个int引用(指针),我们希望main()
和foo()
共享该引用,以便foo()
可以modifiy它的同一个副本,我们该怎么办?为什么当然,我们需要参考我们的参考!指向指针的指针。那就是:
int n; /* integer */
int* n; /* integer reference(pointer). Stores an int's position in memory */
int** n; /* reference to integer reference, or double pointer.
Stores int*'s memory address so we can pass int*s by reference. */
我希望这很有用。
- 1. 通过引用传递函数指针
- 2. 指针和通过引用传递C++
- 3. 通过指针指向指针
- 4. 用指针传递引用
- 5. 解引用双指针,三指针等
- 6. 指向指针的指针在调用函数时获得EXC_BAD_ACCESS
- 7. c指向指针或将函数传递给函数的指针
- 8. 通过使用指针指针来更改引用
- 9. 如何为通过引用调用传递的指针指针赋值?
- 10. 通过引用(指向对象的指针向量)比传递值更快吗?
- 11. 指向函数的指针
- 12. 通过指针指向结构指针来更改变量
- 13. 指向指针的指针和指向数组的指针
- 14. 在使用ctypes的传递指向struct指针C函数
- 15. 函数指针指向一个函数指针的函数
- 16. 通过指向数组的指针取消引用数组值
- 17. 通过引用类来传递指针并使用它
- 18. LLVM:将指向包含指向函数的指针的结构的指针传递给JIT函数
- 19. 如何传递指向构造函数的函数指针?
- 20. 传递指向函数的指针不是通过C中的引用传递的?
- 21. 指向函数指针
- 22. 指针和指针引用
- 23. 使用指针指针数组来操作它指向的指针(C++)
- 24. 在C++中通过指针和引用传递向量
- 25. 向量指针并通过引用传递对象。 C++
- 26. 传递对象指针作为指向基类的指针
- 27. 传递指向C++中另一个指针的'const'指针
- 28. 指向结构函数指针的函数指针
- 29. 指针通过指针不起作用
- 30. 传递指向字符串的指针
可能有助于获得更多的上下文。你能否提供该报价的链接? – JaredPar 2010-10-08 05:55:25
[http://stackoverflow.com/questions/2570447/why-we-used-double-and-triple-pointer-in-objective-c-or-c-language]第一个答案 – Tony 2010-10-08 05:56:27