Linux:指针作为函数参数实现间接赋值成立的三个条件

文章通过示例详细解释了如何使用指针作为函数参数实现间接赋值,包括三级指针的应用,以及在函数中动态分配内存和释放内存的方法。主要内容涉及定义实参和形参、建立关联、通过指针操作修改值,以及内存地址空间的有效性问题。
摘要由CSDN通过智能技术生成

指针作为函数参数实现间接赋值成立的三个条件:
1.调用函数中定义实参和形参,形参要比实参高一级
2.建立实参和形参的关联:把实参取地址赋值给形参
3.在被调函数中通过形参取*操作,间接修改实参的值。

多级指针实现间接赋值的步骤:
1.定义N-1级实参和N级形参,
2.N-1级实参的地址赋值给N级形参,
3.被调函数内部通过N级形参取*操作后,间接修改N-1级实参的值

以三级形参为例:
1.定义二级指针作为实参,定义三级指针作为形参
2.二级指针取地址赋值给三级形参
3.被调函数中,三级形参取*操作,然后间接修改二级实参的值。

多个指针指向同一片地址空间,用来做函数传参,是C语言都精华

内存地址空间的有效性:
被调函数可以使用调用函数的地址空间 调用函数能否使用被调函数的地址空间,要看被调函数生的的地址空间的生命周期是否已经结束

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int mysearch(char ***mp, char * filename, int len)
{
printf(“%s\n”,filename);
char ** p = malloc(sizeof(char *)*len);
int i = 0;
for(;i < len; i++)
{
p[i] = malloc(sizeof(char)*5);
sprintf(p[i],“%d %d %d”,i, i+1, i+2);
//strcpy(p[i],“hel”);
}
*mp = p;//调用函数中,把二级指针的地址赋值给三级形参指针的值

return 0;

}

int myfree(char ***mp, int len)//定义三级指针作为形参
{
int i = 0;
for(;i<len;i++)
{
free((*mp)[i]);
(*mp)[i] = NULL;
}
free(*mp);
*mp = NULL;
return 0;
}

int main(int argc, const char * argv[])
{
char ** mp = NULL; //定义二级指针作为实参
char filename[] = “my file name”;
int len = 10;

int ret = mysearch(&mp,filename,len);//二级指针取地址赋值给三级形参

int i = 0;
for(;i<10;i++)
{
    printf("%s\n",mp[i]);
}
myfree(&mp,len);
return 0;

}

结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值