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

来源:互联网 发布:mac如何删除管理员账户 编辑:程序博客网 时间:2024/06/06 01:27

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

  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的地址源码

阅读全文
0 0
原创粉丝点击