指针与函数
被考次数: 2次
被考频率: 低频率
答错率:    48%
知识难度:
考试要求: 掌握     
知识路径:  > 嵌入式系统软件基础知识  > 嵌入式系统程序设计  > 嵌入式程序设计语言  > 嵌入式C/C++程序设计要求  > C程序设计基础  > 指针


本知识点历年真题试卷分布
>> 试题列表    
 

 
       指针可以作为函数的参数或返回值。
       指针作为函数参数
       函数调用时,用指针作为函数的参数可以借助指针来改变调用函数中实参变量的值。以下面的swap函数为例进行说明,该函数的功能是交换两个整型变量的值。
       
       若有函数调用swap(&x,&y),则swap函数执行后两个实参x和y的值被交换。函数中参与运算的值不是pa、pb本身,而是它们所指向的变量,也就是实参x、y(*pa与x、*pb与y所表示的对象相同)。在调用函数中,是把实参的地址传送给形参,即传送&x和&y,在swap函数中指针pa和pb并没有被修改。
       如果在被调用函数中修改了指针参数的值,则不能实现对实参变量的修改。例如,下面函数get_str中的错误是将指针p指向的目标修改了,从而在main中调用get_str后,ptr的值仍然是NULL。
       
       将上面的函数定义和调用作如下修改,就可以修改实参ptr的值,使其指向函数中所申请的字符串存储空间。
       
       函数调用为:get_str(&ptr);
       用const修饰函数参数,可以避免在被调用函数中出现不当的修改。例如:
       
       其中,from是输入参数,to是输出参数,如果在函数strcpy内通过from来修改其指向的字符(如*from='a'),编译时将报错。
       若需要使指针参数在函数内不能修改为指向其他对象,则可如下修饰指针参数。
       
       指针作为函数返回值
       函数的返回值也可以是一个指针。返回指针值的函数的一般定义形式是:
       
       例如,如下进行函数定义和调用,可以降低函数参数的复杂性。
       
       函数调用为:ptr=get_str();
       注意:不能将具有局部作用域的变量的地址作为函数的返回值。这是因为局部变量的内存空间在函数返回后即被释放,而该变量也不再有效。
       例如,下面函数被调用后,变量a的生存期结束,其存储空间(地址)不再有效。
       
       函数指针
       在C程序中,可以将函数地址保存在函数指针变量中,然后用该指针间接调用函数。例如:
       
       该语句定义了一个名称为Compare的函数指针变量,用于保存任何有两个常量字符指针形参、返回整型值的函数的地址(函数的地址通常用函数名表示)。例如,Compare可以指向字符串运算函数库中的函数strcmp。
       
       函数指针也可以在定义时初始化:
       
       将函数地址赋给函数指针时,其参数和类型必须匹配。
       若有函数定义int strcmp(const char*,const char*);则strcmp能被直接调用,也能通过Compare被间接调用。下面三个函数调用是等价的:
       
 

更多复习资料
请登录电脑版软考在线 www.rkpass.cn

京B2-20210865 | 京ICP备2020040059号-5
京公网安备 11010502032051号 | 营业执照
 Copyright ©2000-2025 All Rights Reserved
软考在线版权所有