求解c的有关问题

求解c的问题
我对c的char型数组作为函数的参数始终闹不明白,下面是我的两个函数,有哪位大侠能告诉我是为什么吗?



  1#include<stdio.h>
  2 
  3 void my_func(char *p)
  4 {
  5 p="hello";
  6 }
  7 
  8 void my_func1(char *p)
  9 {
 10 int i=0;
 11 for(i=0;i<10;i++) p[i]='a';
 12 }
 13 
 14 int main(void)
 15 {
 16 char a[10]={'\0'};
 17 char b[10]={'\0'};
 18 
 19 my_func(a);
 20 my_func1(b);
 21 
 22 printf("%s \n",a);
 23 printf("%s \n",b);
 24 
 25 return 0;
 26 }

调用my_func后,我想是因为在其里面定义的变量p给释放l,所以打印出来的a数组什么都没有,既然如此,为什么调用my_func1后的b数组为什么有值呢?字符数组作为函数参数时到底是值传递还是地址传递?
哪位大侠帮帮忙



------解决方案--------------------
问题不在 值传递或者地址传递 问题在myfunc

p = "hello" 并不是将字符串hello赋值给P指向的地址 而是将静态字符串hello的首地址赋值给指针p


------解决方案--------------------
你调用的是指针啊!!所以会传值,但是指针还是指向同样的地方,再有你的b数组没有一'\0'结尾啊!!
------解决方案--------------------
额,按照你子函数的定义是接受一个字符的指针,指针的值为数组a的地址
但是你第一个函数改变了指针的值,这样就和a数组没有关系了,a数组没有变化。
第二个函数没有改变指针的值。直接在传递过去的地址上操作,自然会改变b的值。
我的理解是,是属于地址传递。传递过去的是数组的地址
------解决方案--------------------
传值。
数组a在栈上,第一个函数里的字符串"hello"(在常量区)并不会被拷贝到数组里(字符串拷贝需要用strcpy函数),仅仅是把"hello"的地址赋值给了指针p。函数结束后,这个p被丢弃了,原来的数组a没有任何改变。
第二个函数里,显然把10个数组元素都填充为字符'a'