这里涉及到的知识点就比较多,我能想到的简单整理一下就是:
1:指针和地址的概念,需要你去梳理一下, 指针实际指向的是一个地址
2:指针相关的符号就是用* 声明指针变量的时候 类型后面加 是代表指针类型 可以给该指针变量赋值一个地址 代表指针只想这个地址。
而这个指针变量,取指针变量指向的内存中的值,就可以再指针变量前面加个 这时 *就不是声明变量了,而是取地址中的值的含义了
3:& 取地址符号可以是对象取地址时用, C++ 后面一个引用的概念 其实也与这个符号相关
所以 这里你需要理解一下指针,地址的概念,需要了解*在不同含义下所起到的含义,以及&在不同场景下代表的含义。
接下来就是你的问题:
1:有一种场景,比如链表,需要在本对象中存储下一个对象的地址,所以用了指针。而取地址,一般就取一个对象的地址,比如赋值给这个指针。
2:& 在哪里都可以用啊 看你的场景啊 看你的样例 Create_MG(&MG); 这里用&符号是因为 void Create_MG(MGraph *MG){} 这里函数定义时 参数是指针类型
指针类型可以用&对象做初始化 比如 int a =0; int *b = &a; 取a的地址赋值给指针b,所以可以用
至于你的失败 是因为你声明函数时 如果这样 void Create_MG(mgraph &MG){} 这其实应该成引用了 引用的概念了解一下,函数传参就不一样了 ,要用Create_MG(MG); 直接传对象 而不是对象的地址
3: 这个问题 知识点应该时scanf格式化相关的问题 getchar只是适应了你的场景 输入一个字符让继续运行用的