数组指针取*号
数组指针取*号,并不是取值的意思,而是指针类型发生了变化
一维数组指针取*,结果为它指向的一维数组第0个元素,指向还是同一个地方
二维数组指针取*,结果为一维数组指针
以此类推......
一、指针作为函数的参数
函数传参
(1)传数值
void swap(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
}
int main()
{
int a=10,b=20;
swap(a,b);
printf("a=%d b=%d\n",a,b);
}
实参:调用函数时传的参数
形参:定义的被调函数时,函数名后边括号里面的数据
结论:给被调函数传数值,只能改变被调函数形参的值,不能改变主调函数实参的值
(2)传地址
void swap(int *x,int* y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
int main()
{
int a=10,b=20;
swap(&a,&b);
printf("a=%d b=%d\n",a,b);
}
结论:调用函数的时候传变量的地址,在被调函数通过*+地址来改变主调函数的变量的值
void swap(int *x,int *y)
{
int *temp;
temp=x;
x=y;
y=temp;//此函数改变的是x,y的指向,并没有给main里面的a和b赋值
}
int main()
{
int a=10,b=20;
swap(&a,&b);
printf("a=%d b=%d\n",a,b);
}
综上所述:(1)要想改变主调函数中变量的值,必须传变量的地址
(2)而且还得通过*+地址赋值
void fun(char *q)
{
q="hello kitty";
}
int main()
{
char *p="hello world";
fun(p);
printf("p=%s\n",p);
}
在fun中改变的是fun函数中局部变量p,并没有改变main函数的p,所以main函数中的p还是指向的helloworld
void fun(char **q)
{
*q="hello kitty";
}
int main()
{
char *p="hello world";
fun(&p);
printf("p=%s\n",p);
}
结合以上所有例子:无论这个变量是什么类型的,要想该改变主调函数的值,
必须传地址,通过*+地址去赋值