一,指针作为函数的输入和输出特性
输入特性的定义:由被调用函数的分配的内存
输出特性的定义:由调用函数分配内存
二,指针的输入特性的使用
主函数分配内存
把内存的首地址转过去
/*************************************************************************
【题目】现有一个字符串"eeddccbbaa",要求写一个函数(接口),实现字符串的反转。
函数接口定义如下:
接口1:实现字符串反转,在函数内部申请空间,存储反转后的字符串
char* rev_str(const char *src) ;//字符串反转
参数:src 为传入要反转的字符串
返回值:成功,返回反转后的字符串,失败返回NULL。
void free_mem(char * str); //释放rev_str函数中申请的内存
> File Name: 一级指针接口.c
> Author: songli
> QQ: 2734030745
> Mail: 15850774503@163.com
> 优快云: http://my.youkuaiyun.com/Poisx
> github: https://github.com/chensongpoixs
> Created Time: 2017/8/26 星期六
************************************************************************/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
//接口1:实现字符串反转,在函数内部申请空间,存储反转后的字符串
char* rev_str(const char *src/*in*/); //字符串反转
//参数:src 为传入要反转的字符串
//返回值:成功,返回反转后的字符串,失败返回NULL。
void free_mem(char * str/*out*/); //释放rev_str函数中申请的内存
int main(int argc, char *argv[])
{
char str[] = "eeddccbbaa";
char *p = rev_str(str);
printf("%s\n", p);
free_mem(p);
system("pause");
return EXIT_SUCCESS;
}
//接口1:实现字符串反转,在函数内部申请空间,存储反转后的字符串
char* rev_str(const char *src /*in*/) //字符串反转//参数:src 为传入要反转的字符串
{
char * _src = src;
int temp = 0;
while (*_src)
{
temp++;
_src++;
}
printf("%d\n", temp);
//开辟内存 \0
char *p = (char *)calloc(sizeof(char), 11);
char * _tsrc = src;
int i = 0;
//字符串倒置
while (*_tsrc)
{
*(p + i) = *(src + temp - 1);
i++;
_tsrc++;
temp--;
}
*(p + 10) = '\0';
printf("%s\n", p);
return p;
}
//返回值:成功,返回反转后的字符串,失败返回NULL。
void free_mem(char * str /*out*/) //释放rev_str函数中申请的内存
{
if (str != NULL)
free(str);
str = NULL;
}
三,指针的输出特性
平级的指针使用
char * rev_str(char *dest,const char *src);
参数:dest 为存储反转字符串的内存地址
Src 为传入要反转的字符串
返回值:成功,返回反转后的字符串,失败返回NULL。
char str[] = "eeddccbbaa";
//开辟内存 \0
char * dest = (char *)calloc(sizeof(char), 11);
//我转入是一个地址 不是&dest而是dest的 dest就是地址
dest = rev_str(dest, str);
printf("%s\n", dest);
二级指针的使用
主要步骤
char * rev_str(char **dest,const char * src); //字符串反转
void free_mem(char **str); //释放rev_str函数中申请的内存
char str[] = "eeddccbbaa";
char * dest = NULL;
//二级指针要转入地址
char * p = rev_str(&dest, str);
printf("%s\n", p);
free_mem(&dest);