指针在C/C++中属于难度系数比较高的招数了,很多人对指针的机制不是特别理解,这里我们用个故事来说明白指针到底是什么,又有什么用。
举个例子,假如你打算用北京平谷的1000吨苹果交付给远在海南的客户,你会怎么做呢?
一种方法是,你把仓库的1000吨苹果拉到海南,放到客户的仓库。
另一种方法是,你只告诉客户,你的苹果都在北京xx区xx街道xx号的仓库,客户自己去取就可以了。这个仓库的地址就是C/C++种的指针。而那1000吨的苹果,就是变量。所以,变量是实实在在的货物,可能比较沉重;而指针只是一个地址,轻量太多了。
int main()
{
int apple = 1000;//apple就是1000吨的苹果。
int *p = &apple;// p就是仓库地址。
apple_check(apple); //调用函数对apple做处理,这里用的是apple,是具体的货物,很重哦,会把这些货物运到海南(copy到另一个函数的栈空间,如果apple这个变量很大,会很占用cpu资源)
apple_check_p(p); //调用函数对apple做处理,这里传的仅仅是个地址,就是北京xx区xx街道xx号的仓库(这里往另一个函数栈空间传入的仅仅是一个地址,具体货物不需要copy进去,大大节省cpu资源了)
}
void apple_check(int apple)
{
if (apple >= 1000) //这里拿运载来的苹果做检测
{
printf("Apple is enough!\n");
} else {
printf("Apple is not enough!\n");
}
}
void apple_check_p(int *papple)
{
if (*papple >= 1000) //这里通过地址去拿到1000t的苹果
{
printf("Apple is enough!\n");
} else {
printf("Apple is not enough!\n");
}
}
到这里,我们就可以看到指针的作用了:用地址而不是具体的变量值,最终都拿到了变量的值,但用地址做传递就会高效很多。
如果你有更好的理解,请留言做进一步讨论。