函数的形参可以是指针,此时将复制实参指针。与其他非引用类型的形参一样,该类形参的任何改变也仅作用于局部副本。如果函数将新指针赋给形参,主调函数使用的实参指针的值没有改变。
事实上被复制的指针只影响对指针的赋值。如果函数形参是非 const 类型的指针,则函数可通过指针实现赋值,修改指针所指向对象的值:
void reset(int *ip)
{
ip = 0; // changes only the local value of ip; the argument is unchanged
}
void reset1(int *ip)
{
*ip = 0; // changes the value of the object to which ip points
}
调用 reset 后,实参依然保持原来的值,但它所指向的对象的值将变为 0:
int i = 42;
int *p = &i;
cout << "i: " << *p << '\n'; // prints i: 42
reset(p); // changes *p but not p
cout << "i: " << *p << endl; // ok: prints i: 42
reset1(p); // changes *p but not p
cout << "i: " << *p << endl; // ok: prints i: 0
如果保护指针指向的值,则形参需定义为指向 const 对象的指针:
void use_ptr(const int *p)
{
// use_ptr may read but not write to *p
}
指针形参是指向 const 类型还是非 const 类型,将影响函数调用所使用的实参。我们既可以用 int* 也可以用 const int* 类型的实参调用 use_ptr 函数;但仅能将 int* 类型的实参传递给 reset 函数。这个差别来源于指针的初始化规则。可以将指向 const 对象的指针初始化为指向非 const 对象,但不可以让指向非 const 对象的指针向 const 对象。
分享到:
相关推荐
C语言实参、形参、函数调用、指针、引用、&符号实例 在C语言中,实参和形参是两个非常重要的概念。实参是指在函数调用时传递给函数的实际参数,而形参是指函数定义中用于接收实参的形式参数。 在函数调用时,实参...
在上述四道经典C语言指针试题中,主要涉及到了内存分配、内存管理以及指针使用的一些常见陷阱。 首先,试题一展示了如何发生内存泄露。在`GetMemory`函数中,通过`malloc`分配了100个字符的空间,但因为传入的是...
C语言指针的左右法制 C语言中的指针声明可以是非常复杂的,但是它们都是由各种声明嵌套构成的。要解读这些复杂的指针声明,需要使用右左法则。右左法则是一个既著名又常用的方法,它可以帮助我们快速解读复杂的指针...
C语言指针数组和命令行参数 C语言中的指针数组是一种类型的数组,数组的每个元素都是一个指针类型的数据。指针数组可以用来存储多个字符串或其他类型的数据,例如: char *pStr[5]; 这是一种定义指针数组的形式,...
C语言中函数形参为指针类型的参数传递详解 在C语言编程中,函数形参是函数定义中声明的变量,用于接收函数调用时传递的参数。在函数形参中,指针类型的参数传递是一种常见的参数传递方式。指针类型的参数传递可以将...
本文将深入探讨C语言指针的应用,并解释如何利用指针提高程序的执行效率。 1. **指针用于函数间传递多个数据**: 在C语言中,函数参数传递通常是单向值传递,即只能将实参的值传递给形参。如果想要在函数调用之间...
在C语言中,形参(形式参数)和实参(实际参数)之间的数据传递是一个重要的概念,它涉及到函数调用时参数值的传递方式。在程序执行过程中,当我们调用一个函数并传递参数时,实参会将参数值传递给形参。然而,这种...
C语言指针题目 本资源摘要信息涵盖C语言指针相关的问题和解答,涵盖了指针的基本概念、指针运算、函数指针、数组指针、多维数组指针等方面的知识点。 一、填空题 1. *(p+5)的值是多少?答案:98 解释:p指向数组...
在C语言中,指针是一种强大的工具,它允许我们直接操作内存地址,从而实现高效的数据操作和复杂的程序设计。下面将详细阐述指针的相关概念及其应用。 1. 指针和指针变量: 指针是C语言中的特殊类型,它存储的是...
《C语言指针详解》 在C语言中,指针是一种强大的工具,它允许程序员直接操作内存,从而实现高效的数据处理和复杂的程序设计。本文将深入解析C语言中的地址、指针及其应用。 首先,理解地址的概念至关重要。地址是...
形参是函数接受的指针变量,而实参通常是变量的地址。比如,交换两个数的值的问题,通常需要传递两个数的指针给函数,通过指针在函数内部完成交换,而不是直接传递数值。 四、指针与数组 数组与指针的关系密切,...
### 浅谈C语言指针的理解 #### 一、引言 C语言作为一种广泛应用的编程语言,其灵活性和效率使其成为系统级编程、嵌入式系统开发等领域的首选语言之一。而在C语言中,指针是一种非常强大的特性,能够极大地提高程序...
在被调用函数中,形参指针会指向调用函数提供的数据地址,这样在被调用函数中对形参指针所指向的数据进行操作,实际上是在操作主调函数中的数据,从而实现对主调函数数据的修改。 其次,返回指针的函数允许函数返回...
在函数调用时,实参与形参之间的传递实际上是地址的传递,因此函数内部对形参的修改会影响到实参,除非函数内部仅进行了地址交换,而没有改变指针所指向的值,就像`turn`函数那样。 总之,掌握C语言的指针概念对于...
【全国计算机等级考试二级C语言指针测试题】 1. C语言中的指针是一种强大的工具,它可以用来存储变量的地址,实现对内存的直接访问。在题目中,语句`*p=*q;`等价于`n2=n1;`,因为它们都实现了将`n1`的值赋给`n2`。 ...