[问题] c语言双重pointer问题

楼主: ptt0720 (湿湿)   2017-06-27 11:04:21
开发平台(Platform): (Ex: Win10, Linux, ...)
macOS
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
我想请问一下丢&A 然后用A**去接是什么意思?
另外我测试了**A *A A 去接
然后印出 *A **A的值都会一样
让我更困惑了
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
console:
10
20
程式码(Code):(请善用置底文网页, 记得排版)
#include <stdio.h>
#include <stdlib.h>
void fun(int **A){
printf("%d\n",*A);
printf("%d\n",**A);
}
int mian(){
int a = 10;
int *A = &a;
fun(&A);
}
补充说明(Supplement):
作者: TWkobe (中华柯比)   2017-06-27 11:08:00
假设a的地址是0x100,值为10 , pointerA的地址为0x200, 值为0x100你把&A喂进去就是把0x200丢进去
楼主: ptt0720 (湿湿)   2017-06-27 11:26:00
那用什么东西接有差吗 用**A *A A
作者: TWkobe (中华柯比)   2017-06-27 11:27:00
你可以想像**A要跑两次所以丢0x200进去后, 他会先依照0x200找出值0x100, 再依0x100寻找得到值10, 所以丢&A后**A为10而丢&A使用*A就只有跑一次, 所以印出0x100
楼主: ptt0720 (湿湿)   2017-06-27 11:31:00
感谢
作者: freeunixer (御剑客)   2017-06-27 11:35:00
你是看什么书写的范例?这个 code 形参、实参用得不好
作者: TWkobe (中华柯比)   2017-06-27 11:35:00
若你只是print出A , 是显示你喂进来的pointer所储存的内容所以依照你的范例结果为0x200
作者: freeunixer (御剑客)   2017-06-27 11:36:00
你最好不要将 main 跟 fun 的变量写一样,才好看出差别你的问题是没搞清楚为什么 main 传 &A 进 fun(),但 fun 却是收 (**A)...事实上,两个 A 是不同的.将 fun 的 A 全改成 B,会比较好区分,也比较容易搞清楚
作者: alex70266 (小眼)   2017-06-29 23:44:00
其实记住C只有call by value就是了阿阿怎么会推文到这来XDDDDD 搞笑orz
作者: zakk0610   2017-08-02 07:29:00
当你的func要改pointer的值(*p的p)时会传**p,传*p无法改p的值精确来讲可以改值但只改到local variable

Links booklink

Contact Us: admin [ a t ] ucptt.com