上次谈到指针相关基础,但遇到了一些问题没有说完,这次再来补充一下,嘿嘿!
通过指针引用字符串:
传入字符数组时:
#include<stdio.h>
int print1(char c1[])
{
int i=0;
while(c1[i]!='\0')
{
printf("%c",c1[i]);
i++;
}
return 0;
}
int print2(char c2[])
{
for(int i=0;c2[1]!='\0';i++)
{
printf("%c",c2[i]);
}
return 0;
}
int main()
{
char c[20]="i love you";
print2(c);
return 0;
}
我用for和while分别打印了字符数组,可以任选其一,打印结果:i love you
传入字符指针时:
#include<stdio.h>
int print3(char *c3)
{
for(char *c4=c3;*c4!='\0';c4++)
{
printf("%c",*c4);
}
return 0;
}
int main()
{
char c[20]="i love you";
char *c1=c;
print3(c1);
return 0;
}
打印结果:i love you
指向函数的指针:这个指针指向某个函数入口的那个地址,称函数指针
一般形式:类型名 (*指针变量名)(函数参数表列)
#include<stdio.h>
int change(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
return 0;
}
int main()
{
int a2=4,b2=5,c;
int *a1=&a2,*b1=&b2;
int (*p)(int *,int *);//声明指向函数的指针变量
p=change;//使其指向函数的入口
(*p)(a1,b1);//调用函数
printf("a2=%d,b2=%d\n",a2,b2);
return 0;
}
返回指针的函数:
一般形式:类型名 *函数名(参数表列)
#include<stdio.h>
int *printf(int (*p)[3],int n)
{
int *p1;
p1=*(p+n);
return (p1);
}
int main()
{
int a[2][3]={1,2,3,4,5,6};
int (*p2)[3]=a;//定义指向二维输的指针
int *p3;
p3=print(a,1);
for(int i=0,i<3;i++)
{
printf("%d\n",*p3++);
}
return 0
}
打印:4 5 6
根据指针函数返回的指针来确定打印哪个一维数组,注意如何定义一个二维数组的指针和指针函数的定义