题目
现有一个字符串"eeddccbbaa",要求写一个函数(接口),实现字符串的反转。java
代码#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; }解析
在参考代码中咱们能够看到 rev_str 函数和 main 函数,在 main 函数中调用了 rev_str 函数,那么咱们就说 main 函数是调用者,rev_str 函数是被调用
者。ide
指针的输入输出是站在被调用者的角度上的,也就是站在此题答案中rev_str 函数的角度上。
rev_str 函数有两个参数 from,len,调用者 main函数在栈区给字符串“eeddccbbaa“分配了空间,经过指针 form 使得被调用者 rev_str 函数获得字符串”eeddccbbaa”的地址,像这种调用者分配空间让被调用者使用的指针参数咱们称之为输入参数。而被调用者 rev_str 函数分配了空间经过指针 to 传回给调用者 main 函数,咱们称之为指针的输出。函数