Linux:指针作为函数参数实现间接赋值成立的三个条件
创始人
2025-05-29 21:42:04
0

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

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

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

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

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

代码:

#include
#include
#include
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 {
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;

}

结果:

在这里插入图片描述

相关内容

热门资讯

俄称控制一定居点 乌称打击俄能... 俄军用航空炸弹打击顿涅茨克地区乌军无人机控制点及人员驻扎点(来源:俄国防部) 6月24日,俄罗斯国防...
原创 泽... 泽连斯基这步棋,看似突然,实则是被逼到墙角后的绝地反击。在卢卡申科刚说完“白俄罗斯军事脆弱、绝不打乌...
战争烧钱停不下来:白宫再要87... 白宫向国会申请876亿美元紧急拨款,覆盖伊朗战争、农民援助及埃博拉应对。其中210亿用于国防弹药采购...
华为发布源网荷储AIDC战略 5月19日消息,2026全球AIDC产业论坛近日召开,华为在论坛中发布源网荷储AIDC战略,围绕Wa...
强震发生后 委内瑞拉总统马杜罗... 当地时间6月24日晚,在委内瑞拉发生连续强震后,遭美国强行控制的委内瑞拉总统马杜罗的社交媒体账号以马...
产能将激增,前三星芯片负责人预... 5月19日消息,周二,韩国国家工程院第285届NAEK论坛上,三星电子设备解决方案部门常任顾问、三星...
美国再次延长对俄石油制裁豁免期... 5月19日消息,美国财政部长贝森特18日通过社交媒体宣布,美国财政部已决定将对俄罗斯海运石油制裁豁免...
奕信通完成B+轮融资,中车资本... 5月19日消息,奕信通宣布完成B+轮融资,由中车资本独家战略投资。此前公司已完成B轮融资,由国际50...
华友钴业增资至约19亿元,增幅... 5月19日消息,天眼查App显示,5月15日,浙江华友钴业股份有限公司发生工商变更,注册资本由约17...
中国驻委内瑞拉使馆提醒在委中国... 当地时间24日傍晚,委内瑞拉连续发生两次7级以上地震,首都加拉加斯震感强烈。 中国驻委内瑞拉使馆提醒...