一级指针通过二级指针进行赋值修改 输出
指针释放内存空间问题
1、注意 :被调用函数中的形参不要随意改动。
2、demo搭建的顺序问题
【根据mytmp(char*p1,int len1,charp2,int *len2)调用函数的参数类型】
no.1 主函数中进行相应的创建
eg:charp1------charp1=null;
int len1--------------int len1;
no.2 调用:
主函数中的mytmp(&p1,&len1,&p2,&len2);无需管/*指针
被调用函数中的搭建
不用管p1,在使用时还是按照定义 char tmp1来使用,最后通过
p1=tmp1;进行修改【实现一个二级指针p1对主函数中一级指针p1进行了修改】
mytmp(char**p1,int *len1,char**p2,int *len2)
char*tmp=null;
tmp1=(char*)malloc(100);//在堆区建立内存空间
strcpy(tmp1, "adsfdsf");
*p1 = tmp1;//通过tmp1进行赋值
demo
#define _CRT_SECURE_NO_WARNINGS
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int mytmp(char**p1,int *len1,char**p2,int *len2)
{
char* tmp1 = NULL;//因为形参不呢个随意改变 所以定义一个char*tmp1 代替char**p1;
tmp1 = (char*)malloc(100);
strcpy(tmp1, "adsfdsf");
if (tmp1==NULL)
{
return -1;
}
*p1 = tmp1;
*len1 = strlen(tmp1);
char* tmp2 = NULL;
tmp2 = (char*)malloc(100);
strcpy(tmp2, "12123243");
if (tmp2 == NULL)
{
return -2;
}
*p2 = tmp2;
*len2 = strlen(tmp2);
return 0;
}
//指针释放 重点
void myrelease(char*p)
{
if (p==NULL)
{
return;
}
free(*p);//时放实参指针变量所指向的内存空间。
*p = NULL;//把实参修改为null
return;
}
int main()
{
char *p1 = NULL;//用二级指针修改一级指针
int len1 = 0;
char*p2 = NULL;
int len2 = 0;
int ret = 0;
ret = mytmp(&p1,&len1,&p2,&len2);
printf("p1:%s\n",p1);
printf("len1:%d\n", len1);
printf("p2:%s\n", p2);
printf("len2:%d\n", len2);
myrelease(&p1);
myrelease(&p2);
printf("hello...\n");
system("pause");
return;
}
网友评论