引用参数
har * fun(char *p)
{
return p;
}
提问:此函数返回的是谁的值,是参数p的地址,还是p的值?
回答:
************************************************************
----------------
p的值,但其值指向一个内存地址
----------------
p是栈中的地址,和局部变量的地址一样,函数返回后这块内存就无效了。
----------------
这种用法还是很常见的,比如链表中。
虽然p是栈中的地址,但是因为它只是指针副本,所以可以改变指针的指向,指向其他地方。
----------------
************************************************************
记得在学习C语言函数那部分的时候,有一个很重要的概念是区别:值传递、指针传递、引用传值(好像是这三种说法)。
我觉得要理解这部分知识点,首先应该知道不同种类的变量在内存中是如何分配存储的,它们的生命周期多长等这些问题,然后在理解哪三种情况就好理解了。函数的参数一般都是在stack栈上分配的,所以它的生命周期就在它所属的函数内,函数执行完毕的时候,它的内存将被回收。
如果我们想在函数内对实际参数进行操作(不是对形式参数的副本)的话,一般会使用引用,即声明函数的形式参数为引用类型,比如char * fun(char * &p),这样实参和形参为同一个变量,我们在函数中操作形参p就等于直接在操作实参变量。我看C++语法书的时候,书上说这样用还有一个好处是,在调用函数的时候,不用再为形式参数分配内存了,这样执行效率会高一点儿。
下面是函数形参为指针的几种情况:
#include <iostream>
using namespace std;
char* func1(char *p);
void func2(char *p);
void func3(char * &p);
char s1[]="原来的";
char s2[]="指向我了吗";
int main()
{
char *ptr=s1;
cout<<ptr<<endl;
ptr=func1(ptr); //返回值改变ptr使它指向另一个地址
//func2(ptr); //ptr的指向没有改变,func2函数中改变的只是它的副本(一个局部变量)
//func3(ptr); //改变了ptr的指向,func3函数的形式参数为引用类型,实参和形参是同一个变量
cout<<ptr<<endl;
return 0;
}
char* func1(char *p)
{
p=s2;
return p;
}
void func2(char *p)
{
p=s2;
}
void func3(char * &p)
{
p=s2;
}
分享到:
相关推荐
在C语言中,函数参数传递有三种形式:值传递、地址传递和引用传递。第一种形式是值传递。值传递是一种将实际参数的值复制给形式参数的过程。在值传递中,函数的形式参数是实际参数的副本,而不是实际参数本身。 让...
这篇内容涉及到的"七参数坐标转换C语言代码"是将理论算法转化为实际程序的一个实例,主要针对大地坐标系(例如WGS84)与空间直角坐标系(如地方坐标系)之间的转换。 首先,我们来理解七参数坐标转换的基本概念。这...
在C语言中,参数的传值方式主要包括值传递、地址传递和引用传递。这三种方式在处理函数调用时有着不同的行为和效果。 1. **值传递**:这是最常见的参数传递方式。在值传递中,函数接收的是实参(实际参数,即调用...
### Fortran与C语言接口参数传递混合编程 #### 1. 概述 本文档主要讨论Fortran与C语言在接口参数传递方面的混合编程技术,特别是针对Sun Studio 12环境下的具体实现方法。Sun Studio是一款由Oracle公司提供的集成...
《C语言函数参数传递过程教学方法研究》这篇文章深入探讨了C语言中函数参数传递的核心概念,旨在解决教学过程中的难点。C语言中的函数调用是一个关键的编程元素,而参数传递则是函数工作的重要机制。文章从变量和...
### C语言函数参数传递的关键概念解析 在C语言编程中,函数是程序设计的基本构建块之一,用于组织代码,使其更模块化、可重用。函数参数传递是函数调用过程中一个核心的概念,它决定了函数如何接收外部数据,以及...
C语言的函数参数传递是程序设计中的一个重要概念,它直接关系到程序中数据的流动和处理方式。在C语言中,函数调用时的参数传递方式主要分为两种:值传递(Call by Value)和地址传递(Call by Address),也称作传值...
在C语言中,引用是指函数参数的别名,是一个指向变量的指针。引用可以看作是一个别名,用于访问变量的值。例如,void fun(int &c) { ... },这里的c是实参n的引用,相当于给实参n起了个新名字叫c。 在C语言中,指针...
根据题目给出的描述和示例代码,我们将重点讨论C语言中的三种函数调用方式:传值(pass by value)、传址(pass by address)和传引用(pass by reference)。这三种方式直接影响了函数内部对参数的操作是否会影响...
5. **第07章 函数.ppt**:函数是C语言中模块化编程的关键,讲解了函数的定义、调用、参数传递以及递归函数的概念。 6. **第08章 预处理.ppt**:预处理器在编译过程中的作用,包括宏定义、条件编译等,这些都是C语言...
学习者会学习如何定义、调用函数,以及参数传递和返回值的处理。 通过深入学习和实践这些知识点,你可以逐步精通C语言,为更高级的编程技术打下坚实基础,如操作系统开发、网络编程、数据结构和算法实现等。同时,...
C语言中的参数传递主要分为两种方式:值传递和引用传递。 - **值传递**:最常用的方式,即实参的值被复制到形参中。这种方式下,对形参所做的修改不会影响实参。 - **引用传递**:通过传递指针来实现,即形参接收的...
在*.f文件中编写完相应代码后,接下来是编写C语言文件,这一步骤中需要注意函数名后面要多加一个下划线,所有参数都以指针形式传递。在C语言中定义的全局变量或存储变量需要通过PSCAD的公共数组来存储,且在函数末尾...
在C语言编程中,头文件是至关重要的组成部分,它们包含了函数声明、宏定义和其他必要的编译时信息。这些头文件让程序员能够方便地使用标准库的功能,而无需编写所有功能的实现代码。以下是对"c语言编程常用头文件"的...
《C语言大全》会深入讲解指针的使用,包括指针的声明、赋值、解引用以及多级指针等。通过学习,你能明白指针如何作为数据的间接访问方式,以及如何利用指针实现动态内存分配和函数参数传递。 此外,书中还会涉及...
C语言中的函数参数传递有多种方式,其中最基础的包括按值传递和按引用传递。按值传递时,传递给函数的是变量的副本,而在函数内部对这些副本的任何操作都不会影响原始数据。按引用传递则允许函数直接操作原始数据,...
了解函数的定义、调用、参数传递,以及返回值的使用,是C语言笔试中常见的考察点。特别是指针作为函数参数,可以实现对内存的直接操作,是C语言的一大特色。 再者,掌握控制流程语句,如条件判断(if-else)、循环...
4. **指针**:指针的声明、赋值、解引用,指针与数组、函数的结合使用。 5. **结构体与联合体**:自定义数据结构,结构体内存对齐,结构体指针操作。 6. **内存管理**:动态内存分配(malloc、calloc、realloc、free...
掌握指针的声明、初始化、解引用以及指针数组和指向指针的指针等高级用法,是提升C语言编程能力的关键。 在专升本考试中,考生还会遇到数组和字符串的应用。数组是一组相同类型的数据集合,而字符串在C语言中被视为...
C语言支持两种参数传递方式:值传递和引用传递。值传递会创建形式参数的副本,对形式参数的修改不会影响到实际参数。而引用传递则是让形式参数成为实际参数的别名,对形式参数的改动会直接影响实际参数。 C语言函数...