C语言中的二级指针做输出

您所在的位置:网站首页 c语言二级内容 C语言中的二级指针做输出

C语言中的二级指针做输出

2023-09-12 06:44| 来源: 网络整理| 查看: 265

一、二级指针做输入与输出

    做输入,主调函数分配内存,被调函数使用;做输出。被调函数分配内存,把运算的结果,以指针做函数参数甩出来。 

#define _CRT_SECURE_NO_WARNINGS #include #include #include //求文件中的两段话的长度 //二级指针做输出,被调函数分配内存。 int GetMem(char **myp1, int *mylen1, char **myp2, int *mylen2) { char *tmp1 =NULL, *tmp2 = NULL; tmp1 = (char *)malloc(100); //在堆区分配内存,并使得tmp1指向这块内存的首地址。 if (tmp1 == NULL) { return -1; } strcpy(tmp1, "asdfghjkl"); *mylen1 = strlen(tmp1); //通过指针间接修改实参的值。 *myp1 = tmp1; tmp2 = (char *)malloc(100); if (tmp2 == NULL) { return -2; } strcpy(tmp2, "11122233333"); *mylen2 = strlen(tmp2); *myp2 = tmp2; //间接修改实参p1的值 return 0; } //*二级指针做参数 void FreeMem(char **myp) { char *tmp = NULL; if (myp == NULL) { return -1; } tmp = *myp; free(tmp); *myp = NULL; } //一级指针做参数 void freemem(char *myp) { char *tmp = NULL; if (tmp == NULL) { return -1; } tmp = myp; free(tmp); myp = NULL; } int main() { char *p1 = NULL, *p2 = NULL; int len1 = 0, len2 = 0; int ret = 0; ret = GetMem(&p1, &len1, &p2, &len2); printf("p1:%s \n", p1); printf("p2:%s \n", p2); FreeMem(&p1); FreeMem(&p2); printf("p1:%s \n", p1); printf("p2:%s \n", p2); system("pause"); return 0; }

 输出:

p1:asdfghjkl p2:11122233333 p1:(null) p2:(null) 请按任意键继续. . .

       二级指针做函数参数,实参是一个二级地址,即存放一级指针地址的内存单元的地址,因此我们可以在函数中通过二级指针去间接修改一级指针本身的值。

       如上面代码,因为我们的FreeMem()函数使用了二级指针做参数,所以可以在一级指针所指向的内UC你空间被释放掉后,可以在函数中修改实参本身的值(上面代码结果实参p1,p2在被调用函数中将值改为了NULL)

       如果我们将函数FreeMem()替换为freemem(),p1和p2的值没有被修改成功,者会出现野指针的情况,程序崩溃。

       



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3