指针的学习(3)指针作为函数的参数的输入和输出的参数的特性

一,指针作为函数的输入和输出特性

  1. 输入特性的定义:由被调用函数的分配的内存

  2. 输出特性的定义:由调用函数分配内存

二,指针的输入特性的使用

主函数分配内存
把内存的首地址转过去

/*************************************************************************

【题目】现有一个字符串"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
    > CSDN: http://my.csdn.net/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);

这是GitHub的地址源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值