void fun1(char str[])
{
char *p="hello world!";
strcpy(str,p);
printf("fun1: %s\n",str);
}
这个会改变原字符数组的值,这里数组名作为参数,其实传递的是数组首元素的地址,形参是指向实参地址的一个变量。
即 fun1(str); 函数调用后, 形参函数内的str所指向的内存地址 和 外面实参str地址是同一个。
strcpy(str,p); 是字符串拷贝函数,赋值后,其实相当于对str所指向内存内容的处理,将p指向的地址的内容赋值给了 str地址的内存中。 又因为 函数内参数str 和外的str是指向的同一个地址,因此会改变原始数组的值。
void fun2(char str[])
{
char *p="hello world!";
str=p;
printf("fun2: %s\n",str);
}
该函数调用后不会改变原来的值。
相当于是调用的时候 函数内 str 地址 和 外面的str地址是指向同一个内存单元。
不同的是 str=p; 这个地方相当于将函数内的 str指针的指向 了p指针的指向的地址。只是地址指向变了,并没有对原始地址的内容作操作,因此不会改变。
另外,函数写的有些问题, main函数里面 字符数组太小额,如果调用函数1 就会出现字符串溢出的情况(helloworld 字符太多了),会出现错误的。还是把数组改大点好。
别在这问编程了 码农都睡了 估计