|
知识路径: > 嵌入式系统软件基础知识 > 嵌入式系统程序设计 > 嵌入式程序设计语言 > 嵌入式C/C++程序设计要求 > C程序设计基础 > 指针 >
|
被考次数:2次
被考频率:低频率
总体答错率:48%  
知识难度系数:
|
由 软考在线 用户真实做题大数据统计生成
|
相关知识点:13个
|
|
|
|
|
|
函数调用时,用指针作为函数的参数可以借助指针来改变调用函数中实参变量的值。以下面的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的值,使其指向函数中所申请的字符串存储空间。
|
|
|
|
|
用const修饰函数参数,可以避免在被调用函数中出现不当的修改。例如:
|
|
|
|
其中,from是输入参数,to是输出参数,如果在函数strcpy内通过from来修改其指向的字符(如*from='a'),编译时将报错。
|
|
|
若需要使指针参数在函数内不能修改为指向其他对象,则可如下修饰指针参数。
|
|
|
|
|
函数的返回值也可以是一个指针。返回指针值的函数的一般定义形式是:
|
|
|
|
例如,如下进行函数定义和调用,可以降低函数参数的复杂性。
|
|
|
|
|
注意:不能将具有局部作用域的变量的地址作为函数的返回值。这是因为局部变量的内存空间在函数返回后即被释放,而该变量也不再有效。
|
|
|
例如,下面函数被调用后,变量a的生存期结束,其存储空间(地址)不再有效。
|
|
|
|
|
在C程序中,可以将函数地址保存在函数指针变量中,然后用该指针间接调用函数。例如:
|
|
|
|
该语句定义了一个名称为Compare的函数指针变量,用于保存任何有两个常量字符指针形参、返回整型值的函数的地址(函数的地址通常用函数名表示)。例如,Compare可以指向字符串运算函数库中的函数strcmp。
|
|
|
|
|
|
|
若有函数定义int strcmp(const char*,const char*);则strcmp能被直接调用,也能通过Compare被间接调用。下面三个函数调用是等价的:
|
|
|
|