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

简介: 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 函数,我们称之为指针的输出。


相关文章
|
8天前
|
C语言
指针进阶(C语言终)
指针进阶(C语言终)
|
4天前
|
搜索推荐 程序员 C语言
指针赋值与引用传递:C语言的基础知识与实践技巧
指针赋值与引用传递:C语言的基础知识与实践技巧
|
2天前
|
搜索推荐 程序员 C语言
指针赋值与引用传递:C语言的基础知识与实践技巧
指针赋值与引用传递:C语言的基础知识与实践技巧
|
6天前
|
Java 程序员 Linux
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
13 0
|
7天前
|
C语言
C语言中的函数指针、指针函数与函数回调
C语言中的函数指针、指针函数与函数回调
7 0
|
7天前
|
存储 C语言
C语言中的多级指针、指针数组与数组指针
C语言中的多级指针、指针数组与数组指针
7 0
|
7天前
|
存储 C语言
C语言数组指针详解与应用
C语言数组指针详解与应用
13 0
|
7天前
|
存储 C语言
C语言中的指针
C语言中的指针
12 0
|
8天前
|
C语言
指针进阶(回调函数)(C语言)
指针进阶(回调函数)(C语言)