对指针的进一步理解

来源:互联网 发布:openresty php 编辑:程序博客网 时间:2024/05/24 01:38

实例一:

void ptest(char *p)
{
    p = malloc(20);
}

int main(int argc, char* argv[])
{
    char *p;
    ptest(p,"i'm a test prog", 20);            /*错误, 函数为实参p作一份拷贝p_copy,真正申请到内存的是p_copy。
    strncpy(p, "i'm a test prog", 20);
    printf("%s/n", p);

    return 0;
}

 

实例二

void ptest(char **p)
{
    *p = malloc(20);
}

int main(int argc, char* argv[])
{
    char *p;
    ptest(&p);                             /*没有问题,二级指针*/
    strncpy(p, "i'm a test prog", 20);      
    printf("%s/n", p);
    return 0;
}

 

实例三

char* ptest(char *p)
{
    p = malloc(20);
}

int main(int argc, char* argv[])
{
    char *p;
    p = ptest(p);                            /*没有问题,有返回值*/
    strncpy(p, "i'm a test prog", 20);
    printf("%s/n", p);
    return 0;
}

 


实例四

#include <stdio.h>
#include <string.h>

struct rec
{
    char* p;
};

void ptest(struct rec *str)
{
    str->p = malloc(20);
}

int main(int argc, char* argv[])
{
    struct rec *str = (struct rec *)malloc(sizeof(struct rec));

    ptest(str);                         /*没问题, 结构体里面的变量可以在外部申请空间*/

    strncpy(str->p, "i'm a test prog", 20);

    printf("%s/n", str->p);

    return 0;
}

 

原创粉丝点击