一、返回指针的函数:
指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的。返回指针的函数的一般形式为: 类型名 *函数名(参数列表)
字符串转换为大写字符例子:
char * toUpper(char *a){
//先保存最初的地址,因为后面的每次循环会改变字符串最初的地址。
char * b = a;
int len = 'a' - 'A'; // 判断ASCII码差值的97 - 65;
while (*a != '\0'){//判断是否结束
if(*a>'a'&&*a<'z'){//判断是否如小写
*(a++)-=len //*a 取值,取数组对应的字符
}
}
//此时都是大写,只要把保存最初地址返回就行了
return b;
}注意的是:这里的参数要传字符串变量,不能传字符串常量
int main(int argc, const char * argv[]) {
char a[]="hello";
char *p=toUpper(a);
printf("%s\n",p); //结果:HELLO
return 0;
}大家都知道函数只能有一个返回值,如果需要返回多个值?怎么办呢?很简单,只要将指针,作为函数参数传递就可以了。
int operate(int a,int b, int *c){
*c = a -b;
return a+b;
}
int main(int argc,const char *argv[]){
int a =1,b=2,c,nubers;
nubers = operate(a,b,&c);
printf("a+b = %d ,a-b=%d",d,c);
}二.指向函数的指针
概述:
函数作为一段程序,在内存中也要占据部分存储空间,它也有一个起始地址,即函数入口地址.
刚好,指针变量用来存储地址的,我们可以利用一个指针指向一个函数,其中函数名就是代表着函数的地址.
指向函数的指针的定义的一般形式:
函数的返回值类型 (*指针变量名) (形式参数1, 形式参数2, ...);
注意:形参,不用带变量名,带数据类型就行了.
int sum(int a,int b){
return a+b;
}
int sub(int a,int b){
return a-b;
}
//函数指针作为参数进行传递
int operate(int a,int b,int (*p)(int,int)){
return p(a,b);
}
int main(int argc, const char * argv[]) {
int a=1,b=2;
int (*p)(int ,int)=sum;//函数名就是函数首地址,等价于:int (*p)(int,int);p=sum;
int c=p(a,b); //这种也可以(*p)(a,b);
printf("a+b=%d\n",c); //结果:a+b=3
//函数作为参数传递
printf("%d\n",operate(a, b, sum)); //结果:3
printf("%d\n",operate(a, b, sub)); //结果:-1
return 0;
}注意:
由于这类指针变量存储的是一个函数的入口地址,所以对它们作加减运算(比如p++)是无意义的。
补充:
三.指向指针的指针.
Int a=10;
Int *p=&a;//指向int型的指针
Int **p1=&p;//指向指针的指针
Int ***p2=&p1;//三级指针

*p2相当于访问p1;
**p2相当于访问p;
***p2相当于访问a;
*p1相当于访问p;
一颗星一条线。
本文详细介绍了C语言中指针的应用,包括返回指针的函数、指向函数的指针及指向指针的指针等内容,并通过实例展示了如何使用这些概念解决实际编程问题。
826

被折叠的 条评论
为什么被折叠?



