c语言指针做函数参数,使用指针地址(二级指针)在被调函数中修改主调函数的指针。

来源:互联网 发布:e8光猫itv端口改成网口 编辑:程序博客网 时间:2024/05/21 09:47

1.代码

#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct {    char *prive;    int data;} T_Str;void copy_mem( char *dst){    strcpy(dst, "aa");}void copy_remalloc(char *dst){    dst=strdup("aaa");}void copy_remalloc_by_pointer(char **dst){    *dst=strdup("aaa");}void dump_str(T_Str str){    printf("----------->\n");    printf("str.data:=%d \n", str.data);    if(str.prive){        printf("str.prive:=%s \n", str.prive);    }else{        printf("str.prive has no data \n");    }    printf("<-----------\n");}#define PRIVE_SIZE 16void test(){    T_Str str;    memset(&str, 0, sizeof(T_Str));    str.prive=NULL;    str.prive=(char *)malloc(sizeof(char)*PRIVE_SIZE);    copy_mem(str.prive);    dump_str(str);    memset(&str, 0, sizeof(T_Str));    str.prive=NULL;    copy_remalloc(str.prive);    dump_str(str);    memset(&str, 0, sizeof(T_Str));    str.prive=NULL;    copy_remalloc_by_pointer(&str.prive);    dump_str(str);}int main(int argc, char *argv[])    {        test();        return 0;    }


2.运行结果

----------->str.data:=0 str.prive:=aa <---------------------->str.data:=0 str.prive has no data <---------------------->str.data:=0 str.prive:=aaa <-----------

3.总结

其实很简单,要想给一个指针重新赋值,使它指向新的内存并修改,传入地址即可。和普通的二级指针一样,结构体同样符合c的规范。

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