C语言-指针作为函数形参类型

Posted DS小龙哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言-指针作为函数形参类型相关的知识,希望对你有一定的参考价值。

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
*/

以上是关于C语言-指针作为函数形参类型的主要内容,如果未能解决你的问题,请参考以下文章

C 语言二级指针作为输出 ( 指针输入 | 指针输出 | 二级指针 作为 函数形参 使用示例 )

C语言-void类型作为万能指针类型

20160211.CCPP体系详解(0021天)

c语言中,函数的形参啥时候必须是指针

C 语言结构体 ( 结构体作为函数参数 | 结构体指针作为函数参数 )

C语言中的函数心形参和实参分别可以为哪几种类型?函数实参可以使任意类型。。。。错在哪?