c拾遗-二级指针、数组内函数
创始人
2024-04-24 19:18:15
0

1、c语言中二级指针

用途1:一般被用在多维数组的环境中,一个二级指针可以指向一个二维数组;
用途2:二级指针作为函数参数使用时,可以通过函数修改实参指针值的目的。

对于第二点用途的理解:
c语言的函数调用中存在值传递和址传递,一般使用指针达到地址传递的目的。
但实际上指针变量本身也是存在实参和形参之分,只不过由于实参指针和形参指针指向了同一区域,
所以可以达到地址传递的目的,即通过修改形参指针所指向内存空间的内容,进而达到修改实参指针指向的区域。

一旦当我们需要在函数调用中修改指针变量本身时,就需要使用二级指针了:
比方说实参指针是一个空指针,而通过形参来分配内存空间,并将该空间返回给实参;

void GetMemory(char **p,int num)
{*p=(char*)malloc(sizeof(char)*num);     //此时*p就变成了是形参本身的地址
}
void main()
{char *str=NULL;GetMemory(&str,100);                    //&str是实参的地址,所以实参和形参之间就可以直接调用strcpy(str,"hello");free(str);
}


上述代码的易错写法是什么样呢:

void GetMemory(char *p,int num)
{p=(char*)malloc(sizeof(char)*num);       //p是形参指向的地址
}
void main()
{char *str=NULL;GetMemory(str,100);                      //str是实参指向的地址,不能通过调用函数来申请内存strcpy(str,"hello");
}


结论:
指向指针的指针的作用: 当要修改实参指针的指向的时候,形参必须使用指向指针的指针。
当修改的是实参指针指向的内容时,则形参只需是指针即可


关于值传递:
指针传递参数本质上是值传递的方式,它所传递的是一个地址值。
值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,
即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。
值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。


2、数组内函数不参与连接
今天碰到一个很奇怪的问题,搞了半天,只把最后的发现记录一下。

struct TEST_TYPE stTest[] =
{
    {"first", first_func},
    {"seconde", second_func}
}

在该结构体数组中,引用了两个函数first_func和second_func
如果这个数组stTest没有被使用,那么这两个函数即便没有定义,但只要声明了函数原型,编译器也是不会报错的,
换句话说,数组内的两个函数只参与编译阶段,而不参与链接,所以只要有函数声明即可。

虽然在数组中引用了这两个函数,但是这个数组并没有被使用,所以出现了上面的现象,一旦这个数组被使用,那么在链接阶段就需要函数定义。

相关内容

热门资讯

从脱贫攻坚到乡村振兴 航天科工... 2025年是巩固拓展脱贫攻坚成果同乡村振兴有效衔接5年过渡期的最后一年,也是“十四五”收官之年。多年...
拜灭士@德国拜耳,专业硬核驱蚊... (转自:大公馆)- 02 -拜灭士定量灭蚊喷雾(粉瓶)创新吸附技术,定量浓缩喷雾,快速灭蚊,无持续挥...
债市生态格局迎来新变化 (转自:覃汉研究笔记)短期30年国债新老券成交活跃度显著提升,长期关注指数久期提升,短期与长期因素共...
喜报×2!卡特彼勒(中国)驾驶... (转自:21sun工程机械商贸网)近日, 卡特彼勒(中国)机械部件有限公司  迎来两个历史性时刻——...
七一路提升改造全面开启! 转自:许昌发布7月4日,备受市民关注的七一路提升改造工程全面开启施工。该项目的建设对于区域基础设施的...
银行理财大盘点,半年规模逆势增... 在监管趋严背景下,银行理财仍然在上半年实现了小幅的逆势增长。财联社据相关渠道盘点,截至2025年6月...
第二家来了 采用第五套标准申报... 每经AI快讯,近日,生物医药企业恒润达生递交了科创板申报材料,申报书明确表示,本次申报科创板采用的是...
高盛列出7月港股及中概股买入名... 7月4日,全球知名投行高盛发布的亚太区7月策略报告中,将联想集团(00992.HK)纳入其基于盈利重...
南京艺术学院赴南通开展“艺术赋... 中国青年报客户端讯(中青报·中青网见习记者 张仟煜 记者 李超)7月2日至7月4日,南京艺术学院组织...
上大陈,登“台州舰”!大陈岛军... 转自:上观新闻7月1日,大陈岛军事文化体验中心正式对外开放,23件海陆空退役装备集体亮相,面朝大海,...