最易理解的C语言指针函数基础点以及经典例程

指针函数想必大家都知道指针函数、但是感觉在最基础的C代码程序开发中用到的却很少。花费了一段时间进行了一些总结。感兴趣的可以互相学习一下。共同进步!话不多说直接进入主题

概念及函数构成

  • 指针函数是指一个函数的 返回值为地址量 的函数
  • 指针函数定义的一般形式如下:
  <数据类型> * <函数名称>(<参数说明>)
  {
  		语句序列;
  }

例如指针函数的声明:

int * func(int x,int y);

接下来分析一个题目,查找一下哪里存在问题

#include
#include
char * getstring();
int main (void)
{
	printf("---%s---",getstring());
	return 0;
}
char * getstring()
{
	char str[20];
	strcpy(str,"hello world\n");
	return str;
}

上边这个示例的问题出在是在函数getstring()返回值是一个字符串的地址,但是返回的变量是一个局部变量,局部变量在函数执行完成之后,就会释放指针变量占用的内存。而在主函数中调用函数时,此内存地址就可能会被其他地方再次占用,打印出的数据就不是自己想要的结果。

最简单的修改办法有以下三种方式:

  1. 将定义的数组修改为全局变量。
  2. 将定义的数组定义为静态变量:static char str[20];
  3. 定义一个字符串常量存放数据:char *str = “hello world”;

运行结果:

---hello world---

总结

指针函数的返回值:是以下几种情况可以返回。

  1. 全局变量的地址
  2. static 变量的地址
  3. 字符串常量的地址

例1:编写一个指针函数实现将一个字符串的空格删除

#include
#include
char * del_space(char * data);//函数声明
int main(void)
{	
	char str[] = "how are you !";
	puts(str);//打印函数删除空格之前的字符串
	del_space(str);//调用函数
	puts(str);//打印函数删除空格之前的字符串
	return 0;
}
char * del_space(char * data)
{
	char *p;
	char *r;
	r = data;//记录传进来的指针变量的起始地址
	p = data;//输入的指针变量传入新定义的指针变量
	while(*data)//判断地址上的每一位数不等于'\0'是进入循环0
	{
		if(*data != ' ')
		{
			*p = *data;//地址上的值不是空格时,将其中内容放到新的指针变量内
			data++;//指针地址增加
			p++;//指针地址增加
		}
		else
		{			
			data++;//指针地址增加
		}
	}
	*p = '\0';//在去除空格的新的字符串的结尾加入字符'\0'结束字符串。
	return r;
}

运行结果:

how are you !
howareyou!

例2:使用指针函数编写一个代码实现两个字符串的连接

#include
#include
char * mstrcat(char * dest,const char *src);//函数声明
int main(void)
{	
	char dest[] = "How are you ,";
	char src[] = "Nice too meet you!";
	puts(mstrcat(dest,src));//调用函数并进行打印
	return 0;
}
char * mstrcat(char * dest,const char *src)
{
	char *dest_new;
	dest_new = dest;
	while(* dest)
	{	
		dest++;//首先循环使地址指针指向dest字符串的末尾
	}
	while(*src)
	{
		*dest = *src;//在dest字符串末尾添加src字符串的第一个字符
		dest++;//指针地址移动
		src++;//指针地址移动
	}
	*dest = '\0';//在新的字符串的结尾加入字符'\0'结束字符串。
	return dest_new;
}

运行结果:

How are you ,Nice too meet you!

你可能感兴趣的:(笔记,c语言,开发语言,指针)