借鉴于(https://blog.csdn.net/a3748622/article/details/79286974)
做总结用,
如有冒犯,可评论删除。
一、(*)指针形参(数值计算)
(1)AddNum1没有改变Num1的值:(int data)
主函数中的代码“ AddNum1(Num1); ”。实质上,它将Num1的值赋值给了子函数的形参“ data ”。【形参本身不开辟空间,被实参赋值后才开辟,因此"&Num1 != &data"】。
所以函数中的其他代码,是针对“ data ”进行运算的,而“ Num1 ” 除了把它自身的值传递给“ data ”外没有其他任何操作。
(2)AddNum2将Num1的值自增了1:(int* data)
AddNum是将“&Num1”赋值给指针变量“ data ”,而“ * ”指向 “ Num1 ”。
二、(**)指向指针 的指针形参(内存分配)
主函数声明了一个指向0x00000001地址的char型指针pMemory,并通过子函数申请内存,将申请得到的地址赋值给pMemory。
(1)GetMemory1();并不能将地址赋值给pMemory
类似于“ AddNum1(); ”,但为什么这次的形参带有“ * ”却不能填写内容呢?可能是因为这个内容是地址,而指针本身不能保存地址。
(1)GetMemory2();成功将申请得到的地址赋值给pMemory
此处" * pAddr "不仅仅是指针,还算作指针变量。