北京网站建设方案书,青创云网站建设,单页网站如何做cpa,51网站一起做网店作者#xff1a;小树苗渴望变成参天大树 作者宣言#xff1a;认真写好每一篇博客 作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 #xff0c;就 给 作 者 点 点 关 注 吧#xff01; 我们在不管指针那篇博客#xff0c;还是在函数那篇博客中#xff0c;我都给大家讲解过… 作者小树苗渴望变成参天大树 作者宣言认真写好每一篇博客 作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 就 给 作 者 点 点 关 注 吧 我们在不管指针那篇博客还是在函数那篇博客中我都给大家讲解过传值和传址的区别但今天为了把知识点串连起来让大家更好的理解在讲解一遍传址和传值也相当于给大家做复习了。
举个例子通过函数交换两个整型的值
void Swap(int a, int b)
{int tmp a;a b;b tmp;
}我们发现通过这个函数没有办法交换两个数原因是这是值传递为什么值传递不行呢我将画一个图让大家理解 我们来看一下传址可不可以
void Swap(int* a, int* b)
{int tmp *a;*a *b;*b tmp;
}
int main()
{int a 10;int b 20;printf(交换前a%d b%d\n, a, b);Swap(a, b);printf(交换后a%d b%d, a, b);return 0;
}看到这里相信大家对为何修改数据需要用指针接收了吧但是只要用指针接收的都可以改变里面的数据吗我们再来看一个例子
void Address(int* a)//传一级指针用一级指针接收
{a 0x11223344;
}
int main()
{int* a 0x1122ff44;//假设a里面存放是一个整型数据的地址printf(a之前的地址a%p\n, a);Address(a);printf(a之后的地址a%p, a);return 0;
}我们看到我们的a的地址并没有改变这是为什么呢 原因是我们a里面保存的虽然是地址但地址是地址编号是数值实际上也是值那我们怎么去做呢 我先画一个图让大家理解一下 所以看我们定义的什么类型的数据就要使用相应的类型去接收才能改变里面的内容整型就用一级指针。是一级指针就用二级指针接收。那我们怎么修改上面的案例呢
void Address(int** a)
{*a 0x11223344;
}
int main()
{int* a 0x1122ff44;printf(a之前的地址a%p\n, a);Address(a);printf(a之后的地址a%p, a);return 0;
}看到这里我相信大家有了更深一层的理解了吧 对于机器而言传值和传址都是传值没有区别但我们作为使用者这么说有利于学习和区分 这时候大家在去看看我写的关于单链表的博客就可以更好的理解为什么传二级指针观察一下函数体看看那些需要改变指针里面的数值。单链表