美文网首页C语言深度学习
C语言学习第12篇--- 一维指针及数组做函数参数剖析

C语言学习第12篇--- 一维指针及数组做函数参数剖析

作者: CodeAllen | 来源:发表于2019-06-08 16:11 被阅读0次
    0414.jpg

    说明:
    本文原创作者『Allen5G』
    首发于微信公众号『Allen5G』
    标签:编程,软件,算法,思维


    获取一块内存的方法,有两个方法

    一维指针做函数参数

    第一:return

    char*GetMemory(char * p,intnum)
    
    {
    
    p=(char*)malloc(num*sizeof(char));
    
    returnp;
    
    }
    
    intmain()
    
    {
    
        char*str=NULL;
    
        str=GetMemory(str, 10) ;
    
        strcpy(str,”hello”);
    
        free(str);
    
        return0;
    
    }
    
    image.gif

    这个方法简单,容易理解。

    第二:用二级指针。

    voidGetMemory(char ** p,intnum)
    
    {
    
    *p=(char*)malloc(num*sizeof(char));
    
    returnp;
    
    }
    
    intmain()
    
    {
    
    char*str=NULL;
    
    GetMemory(&str,10);
    
    strcpy(str,”hello”);
    
    free(str);
    
    return0;
    
    }
    
    image.gif

    注意,这里的参数是&str 而非 str。这样的话传递过去的是 str 的地址,是一个值。在函数内部,用钥匙(“”)来开锁: (&str),其值就是 str。所以 malloc 分配的内存地址是真正赋值给了 str 本身。

    数组作函数参数:只传递地址,将数组第一个元素指针传递到函数中

    C 语言中,当一维数组作为函数参数的时候,编译器总是把它解析成一个指向其首元素首地址的指针。

    同样的,函数的返回值也不能是一个数组,而只能是指针。

    函数本身是没有类型的,只有函数的返回值才有类型

    /*2018年1月18日13:12:45
     *测试代码
    */
    voidfun(char*p)
    {
    charc = p[3];//或者是 char c = *(p+3);
    }
    同样,你还可以试试这样子:
    voidfun(chara[10])
    {
    charc = a[3];
    }
    intmain()
    {
    charb[100]=“abcdefg”;
    fun(b);
    return0;
    }
    
    image.gif

    运行完全没有问题。实际传递的数组大小与函数形参指定的数组大小没有关系。既然
    如此,那我们也可以改写成下面的样子:

    voidfun(chara[])
    {
    charc = a[3];
    }
    
    image.gif

    改写成这样或许比较好,至少不会让人误会成只能传递一个10个元素的数组。


    说明

    1.该文档仅供个人学习使用,版权所有,禁止商用。

    2.本文由我一个人编辑并整理,难免存在一些错误。

    3.为了方便大家平时公交、地铁、外出办事也能用手机随时随地查看该教程,该教程同步更新于微信公众号『Allen5G』。

    关于我

    我的博客:https://blog.csdn.net/super828

    我的GitHub:https://github.com/lkk789

    我的微信公众号(ID:Allen5G)主要分享软件工程师进阶(嵌入式,Linux,C/C++,python,英语),程序员职业发展,如果想查看更多内容,可以关注我的微信公众号『Allen5G』。

    我的微信公众号(ID:Allen5G),每天分享编程,算法,软件进阶知识(嵌入式,Linux,C/C++,python,英语)。

    我是Allen,世界500强外企通信软件工程师,欢迎关注我的写作365

    相关文章

      网友评论

        本文标题:C语言学习第12篇--- 一维指针及数组做函数参数剖析

        本文链接:https://www.haomeiwen.com/subject/tvvixctx.html