关于函数中指针参数有关问题

关于函数中指针参数问题
[code=c][/code#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct foo {
int i;
char n[100];
struct foo *l;
struct foo *r;;

}N;
void treep(N* p){
if (p!=NULL){
treep(p->l);
printf("%4d %s\n",p->i,p->n);
treep(p->r);
}
}
void create(char *t,N* foo){
if (foo==NULL){
foo=(N *)malloc(sizeof(N));
strcpy(foo->n,t);
foo->i=1;
foo->l=NULL;
foo->r=NULL;
}
else if (strcmp(t,foo->n)){
create(t,foo->r);
}
else if (strcmp(t,foo->n)<0){
create(t,foo->l);
}
else {
foo->i++;
}
return foo;
}
int main(void)
{
char t[100];
gets(t);
N* foo=NULL;
while(strlen(t)>1){
create(t,foo);
                //printf("%p\n",foo);测试用!
memset(t,100,0);
gets(t);
}
treep(foo);
return 0;
}]
这个是个二叉树,我的问题是create(t,foo);中我将foo的指针作为参数,foo=(N *)malloc(sizeof(N));这句中不是已经将foo的值改变了吗?可是我在测试时发现foo还是NULL
这是为什么!?

------解决方案--------------------
指针作为参数, 只能改变指针指向的对象的值. 
而不能改变指针本身的值, 也就是指针指向哪里.
要改变指针本身的值, 用 N** foo 做参数.