值传递和地址传递:
值传递:形参不影响实参的值
地址传递:形参改变实参
如:
void swap(int* a;int* b)
{
//a=&a b=&b
int temp=*a;
*a=*b;
*b=temp;
//对换ab对应地址的值
}
int main()
{
a=10, b=20;
swap(&a,&b);
//传递a和b的地址
printf("%d\n",a); //20
printf("%d\n",b); //10
}
数组指针与函数:
1、数组作为函数参数:
数组会退化为指针,丢失数组的精度
如:
void b(int arr[])
{
int len=sizeof(arr)/sizeof(arr[0]);
printf("%d",len)
}
//输出为1
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9,10};
b(arr);
return 0;
}
操作:
字符串替换:
void strcat1(char* ch1,char* ch2) //数组写法
{
int i=0;
while(ch1[i])
i++;
int j=0;
while(ch2[j])
{
ch1[i+j]=ch2[j];
j++;
}
ch1[i+j]=0;
}
void strcat3(char* ch1,char* ch2) //指针写法 1
{
int i=0;
while(*(ch1+i))
i++;
int j=0;
while(*(ch2+j))
{
*(ch1+i+j)=*(ch2+j);
j++;
}
*(ch1+i+j)=0;
}
void strcat2(char* ch1,char* ch2) //指针写法 2
{
int i=0;
while(*ch1)
ch1++;
int j=0;
while(*ch2)
{
*ch1=*ch2;
ch1++;
ch2++;
}
*ch1=0;
}
int main()
{
char ch1[]="hello";
char ch2[]="world";
strcat(ch1,ch2)
}
2、指针作为函数返回值:
字符串查找字符(串):
char* strchr(char* str,char ch)
{
int i=0;
while(str[i])
{
if(ch[i]==ch;
return &str[i];
i++;
}
return NULL; //若未找到则返回空
}
int main
{
char str[]="hello world";
char* p=strchr(str,'m'); //查找字符
//char* p=strchr(str,'lle'); //查找字符串
}