1. 前言
C语言函数里最常用就是指针传参和返回地址,特别是字符串处理中,经常需要封装各种功能函数完成数据处理,并且C语言标准库里也提供了string.h 头文件,里面包含了很多字符串处理函数;这些函数的参数和返回值几乎都是指针类型。这篇文章就介绍如何使用指针作为函数参数、并且使用指针作为函数返回值。
下面通过几个示例代码来演示用法。
2. 通过指针间接修改主函数里局部变量空间的值
#include <stdio.h> #include <string.h> void func(int *p); int main() { int a=100; func(&a); printf("a=%d\n",a); //200 return 0; } void func(int *p) { printf("p=%d\n",*p); *p=200; }
3. 在子函数里通过指针类型间接交换main函数里局部变量空间的值
#include <stdio.h> #include <string.h> void func(int *a,int *b); int main() { int a=100,b=200; func(&a,&b); //func(100,200) printf("a=%d,b=%d\n",a,b); return 0; } void func(int *a,int *b) { int c; c=*a; *a=*b; *b=c; } //return语句只能返回一个值 //如果函数想返回多个值,可以使用指针(形参)实现。
4. 函数返回指针类型
#include <stdio.h> #include <string.h> char *func(char *p); int main() { char str[]="1234567890"; char *p; p=func(str); printf("%s\n",p); // return 0; } char *func(char *p) { p+=3; //p向后偏移3个字节 return p; }
5. 编写一个计算字符串长度的函数
函数功能: 传入字符串,返回字符串的长度。
与strlen函数功能一样即可。
#include <stdio.h> #include <string.h> int my_strlen(char *p); //函数声明 int main() { char buff[100]; int len; printf("请输入字符串:"); scanf("%s",buff); len=my_strlen(buff); printf("len=%d\n",len); return 0; } //每个函数的功能要单一 //计算字符串长度。 字符串特点结尾是有'\0' //"1234567890" int my_strlen(char *p) { char *str=p; while(*str++!='\0'){} return str-p-1; }
6. 编写一个字符串排序函数
函数功能: 传入字符串,在函数里实现字符串从大到小或者小到大排序。
注意: 从大到小或者小到大排序可以通过函数形参区分。
#include <stdio.h> #include <string.h> int my_strlen(char *p); //函数声明 void str_sort(char *p,char flag);//函数声明 int main() { char buff[100]; int len; printf("请输入字符串:"); scanf("%s",buff); //进行排序 str_sort(buff,0); printf("从小到大排序=%s\n",buff); str_sort(buff,1); printf("从大到小排序=%s\n",buff); return 0; } //每个函数的功能要单一 //计算字符串长度。 字符串特点结尾是有'\0' //"1234567890" int my_strlen(char *p) { char *str=p; while(*str++!='\0'){} return str-p-1; } /* 函数功能: 实现字符串排序.支持从小到大或者大到小 函数形参: char *p 将要排序的字符串 char flag 选择排序方式 0表示从小到大排序 1表示大到小排序 */ void str_sort(char *p,char flag) { int len; int i,j,tmp; len=my_strlen(p); for(i=0;i<len-1;i++) { for(j=0;j<len-1-i;j++) { if(flag)//1表示大到小排序 { if(p[j]<p[j+1]) { tmp=p[j]; p[j]=p[j+1]; p[j+1]=tmp; } } else//0表示从小到大排序 { if(p[j]>p[j+1]) { tmp=p[j]; p[j]=p[j+1]; p[j+1]=tmp; } } } } } //unsigned char a; // 0~255 占1 =8位 1111 11111 //char a; //-128 ~ +127
7.变量默认的系统初始化值
#include <stdio.h> #include <string.h> int a1; int main() { int a2; static int a3; printf("a1=%d\n",a1); //0 printf("a2=%d\n",a2); //随机值 printf("a3=%d\n",a3); //0 return 0; } /* 全局变量默认值是0 局部变量默认值是随机值(系统没有赋值) 静态变量默认值是0 */