|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Max472 于 2022-5-30 23:00 编辑
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct node {
- int data;
- struct node* next;
- } node;
- typedef node* LinkList;
- void f(LinkList* L);
- void F(LinkList L);
- int main(void)
- {
- node p;
- LinkList L = &p;
- printf(" main 中 &L = %p, L = %p, p = %p\n", &L, L, &p);
- f(&L);
- F(L);
- return 0;
- }
- void f(LinkList* L)
- {
- printf(" f 中 *L = %p, L = %p, &L = %p\n", *L, L, &L);
- }
- void F(LinkList L)
- {
- printf(" F 中 L = %p, &L = %p\n", L, &L);
- }
复制代码
这里是运行结果:(由于等级不够,不能上传图片,我把结果复制了一下 )
main 中 &L = 0117FD30, L = 0117FD3C, p = 0117FD3C
f 中 *L = 0117FD3C, L = 0117FD30, &L = 0117FC5C
F 中 L = 0117FD3C, &L = 0117FC5C
注:这些内存地址在不同电脑上都是不一样的,在一台电脑上多次运行的结果每次也都是不一样的。
f 函数传的是指针的地址,F 函数传的是指针
C语言的函数是传值,当你传指针的时候,其实是 重新创建了一个和你传的指针 指向相同的指针,这俩是 两个指针,就是他俩指向同一块地址,你在函数里边修改指针的指向 其实修改的是 这个函数里边新创建的指针的指向,原指针的指向还是 原来的地方没有变,如果你想改变原指针的指向,就要给函数传 指针的地址,虽然也是传值,但这个值是指针的地址,你可以通过对这个地址进行解引用(也就是 *head)来操纵指针从而改变它的指向。
而传指针仅仅是传的 这个指针指向的那块区域的地址,你只能对那块区域 做一些改变,而无法改变你传入的指针。 |
|