#include "stdio.h"
#include "stdlib.h"
#include "string.h"
//2级指针作为函数参数,来修改主函数中1级指针的值
//函数的运算结果,可以通过指针做函数参数的形式甩出来
void getMem(char **p)
{
*p = 400; //间接赋值,p2是p1的地址
}
//函数参数 char **myp1 表示定义了一个2级指针
//主函数调用该函数时,把指针p1的地址作为实参传给了myp1,相当于 myp1=&p1;
int getMem2( char **myp1, int *mylen1, char **myp2, int *mylen2 )
{
int ret = 0;
char *tmp1,*tmp2;
tmp1 = (char *)malloc(100);
strcpy(tmp1,"123456789");
//间接赋值
*mylen1 = strlen(tmp1); //1级指针
*myp1 = tmp1; //2级指针
tmp2 = (char *)malloc(200);
strcpy(tmp2,"asdsffffdf");
//间接赋值
*mylen2 = strlen(tmp2); //1级指针
*myp2 = tmp2; //2级指针
printf("tmp2:%s\n",tmp2);
printf("*myp2:%s\n",*myp2);
return ret;
}
void main()
{
int ret = 0;
char *p1 = NULL; //1级指针
int len1 = 0;
char *p2 = NULL; //2级指针
int len2 = 0;
char **p3 = NULL;
p1=0x11;
p3=0x22;
//直接修改p1的值
p1 = 0x111;
//间接修改p1的值
p3 = &p1;
*p3 = 100; //间接赋值,p3是p1的地址
printf("p1:%d\n",p1); //打印的是指针变量p1的值,而不是p1指向的内存空间,因为还没有分配空间,打印会宕机
{
*p3 = 200; //间接赋值,p2是p1的地址
printf("p1:%d\n",p1); //打印的是指针变量p1的值,而不是p1指向的内存空间,因为还没有分配空间,打印会宕机
}
getMem(&p1);
printf("p1:%d\n",p1); //打印的是指针变量p1的值,而不是p1指向的内存空间,因为还没有分配空间,打印会宕机
getMem2(&p1,&len1,&p2,&len2);
if( 0 != ret )
{
printf("func getMem2() err:%d\n",ret);
return ret;
}
printf("p1:%s, len1:%d, p2:%s, len2:%d\n",p1,len1,p2,len2);
//释放函数getMem2中分配的内存空间(即主函数中p1、p2所指向的内存空间)
if( NULL != p1 )
{
free(p1);
p1=NULL;
}
if( NULL != p2 )
{
free(p2);
p2=NULL;
}
system("pause");
return;
}
通过2级指针改变1级指针的指向
最新推荐文章于 2022-10-23 10:51:54 发布