C语言提高:一级指针的输入输出

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言提高:一级指针的输入输出相关的知识,希望对你有一定的参考价值。

题目

现有一个字符串"eeddccbbaa",要求写一个函数(接口),实现字符串的反转。

代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

char* recv_str(char *from,int len)
{
	// 判断字符串是否存在
	if (from==NULL)
	{
		printf("from字符串不存在\\n");
		return NULL;
	}

	// 使得p 指向字符串的尾部
	char *p = from + len -1;
	// 为了使 len 的值一直保存的是字符串的长度
	int l = len;

	char *to = (char*)malloc(100);	// 转化成的目的字符串
	if (to==NULL)
	{
		printf("to字符串malloc失败!\\n");
		return NULL;
	}
	// 根据字符串的长度,让字符串 from 最后一个字符换到字符串 to 的第一个字符以此类推
	for (;l>0;p--,to++,l--)
	{
		*to = *p;
	}
	// 使字符串的最后一个字符是‘\\0’
	*to = '\\0';

	// 使得 to 指针从新指向字符串的开头
	to = to - len;

	return to;
}


int main()
{
	char from[100] = "eeddccbbaa";
	int len = strlen(from);		// 求出字符串长度
	char *to = recv_str(from, len);
	printf("%s", to);			// 打印出字符串

	return 0;
}

解析

1. 调用者与被调用者

在参考代码中我们可以看到 rev_str 函数和 main 函数,在 main 函数中调用了 rev_str 函数,那么我们就说 main 函数是调用者,rev_str 函数是被调用
者。

2. 指针的输入输出

指针的输入输出是站在被调用者的角度上的,也就是站在此题答案中rev_str 函数的角度上。
rev_str 函数有两个参数 from,len,调用者 main函数在栈区给字符串“eeddccbbaa“分配了空间,通过指针 form 使得被调用者 rev_str 函数得到字符串”eeddccbbaa”的地址,像这种调用者分配空间让被调用者使用的指针参数我们称之为输入参数。而被调用者 rev_str 函数分配了空间通过指针 to 传回给调用者 main 函数,我们称之为指针的输出。

以上是关于C语言提高:一级指针的输入输出的主要内容,如果未能解决你的问题,请参考以下文章

C语言提高内容目录

C语言提高:结构体嵌套一级指针

C语言提高:结构体嵌套一级指针

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

C语言提高: 二级指针的输入输出

C语言提高: 二级指针的输入输出