指针是指向地址的一个东西;
而函数里的参数传入的只是一个副本;
想在子函数里改动main里的值只能通过指针;
在所有函数中你传入的只是一个副本,你在函数里面改动数据,对main()里的东西
不影响;
这个数据互换的例子:
#include <stdio.h>
void swap(int a,int b)
{
int temp=a;
a=b;
b=temp;
}
int main()
{
int a=4,b=5;
swap(a,b);
printf("a = %d ,b = %d\n",a,b);
return 0;
}
在互换后a,b,不变,变得只是他们的副本;
在传入值时如果传入的是地址,则改变的是其本身的值;
#include <stdio.h>
void swap(int *a,int *b)
{
printf("address in swap():%p %p\n",a,b);
int temp=*a;
*a=*b;
*b=temp;
}
int main()
{
int a=4,b=5;
printf("address in main():%p %p\n",&a,&b);
swap(&a,&b);
printf("a = %d ,b = %d\n",a,b);
return 0;
}
在数据结构书上经常看到的链式结构中有
#include <stdio.h>
#include <malloc.h>
typedef struct LNode
{
int data;
struct LNode *next;
}LNode;
void InitLinkList(LNode *L)
{
L=(LNode *)malloc(sizeof(LNode));
L->data=0;
L->next=NULL;
}
int main()
{
LNode *L=NULL;
InitLinkList(L);
printf("%p\n",L);
return 0;
}
这样的例子,在InitLinkList(L)里的L传入的只是*LNode的副本,若要操作他的地址
还需要在前面在取地址
当然你不怕麻烦完全可以写成
void InitLinkList(LNode **L)
只要你觉得好理解就行;