`
fujinbing
  • 浏览: 237343 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

c语言 引用参数

阅读更多

引用参数

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语言中,函数参数传递有三种形式:值传递、地址传递和引用传递。第一种形式是值传递。值传递是一种将实际参数的值复制给形式参数的过程。在值传递中,函数的形式参数是实际参数的副本,而不是实际参数本身。 让...

    七参数坐标转换C语言代码

    这篇内容涉及到的"七参数坐标转换C语言代码"是将理论算法转化为实际程序的一个实例,主要针对大地坐标系(例如WGS84)与空间直角坐标系(如地方坐标系)之间的转换。 首先,我们来理解七参数坐标转换的基本概念。这...

    关于C语言中参数的传值问题

    在C语言中,参数的传值方式主要包括值传递、地址传递和引用传递。这三种方式在处理函数调用时有着不同的行为和效果。 1. **值传递**:这是最常见的参数传递方式。在值传递中,函数接收的是实参(实际参数,即调用...

    fortran与c语言接口参数传递混合编程.doc

    ### Fortran与C语言接口参数传递混合编程 #### 1. 概述 本文档主要讨论Fortran与C语言在接口参数传递方面的混合编程技术,特别是针对Sun Studio 12环境下的具体实现方法。Sun Studio是一款由Oracle公司提供的集成...

    C语言函数参数传递过程教学方法研究.pdf

    《C语言函数参数传递过程教学方法研究》这篇文章深入探讨了C语言中函数参数传递的核心概念,旨在解决教学过程中的难点。C语言中的函数调用是一个关键的编程元素,而参数传递则是函数工作的重要机制。文章从变量和...

    C语言函数参数传递的几个问题

    ### C语言函数参数传递的关键概念解析 在C语言编程中,函数是程序设计的基本构建块之一,用于组织代码,使其更模块化、可重用。函数参数传递是函数调用过程中一个核心的概念,它决定了函数如何接收外部数据,以及...

    对C语言函数参数传递的探讨——以交换问题为例.pdf

    C语言的函数参数传递是程序设计中的一个重要概念,它直接关系到程序中数据的流动和处理方式。在C语言中,函数调用时的参数传递方式主要分为两种:值传递(Call by Value)和地址传递(Call by Address),也称作传值...

    C语言实参、形参、函数调用、指针、引用、&符号实例[定义].pdf

    在C语言中,引用是指函数参数的别名,是一个指向变量的指针。引用可以看作是一个别名,用于访问变量的值。例如,void fun(int &c) { ... },这里的c是实参n的引用,相当于给实参n起了个新名字叫c。 在C语言中,指针...

    C语言函数调用

    根据题目给出的描述和示例代码,我们将重点讨论C语言中的三种函数调用方式:传值(pass by value)、传址(pass by address)和传引用(pass by reference)。这三种方式直接影响了函数内部对参数的操作是否会影响...

    c语言教案 c语言课件 C语言

    5. **第07章 函数.ppt**:函数是C语言中模块化编程的关键,讲解了函数的定义、调用、参数传递以及递归函数的概念。 6. **第08章 预处理.ppt**:预处理器在编译过程中的作用,包括宏定义、条件编译等,这些都是C语言...

    C语言全套资料 C语言程序设计 C语言算法 C语言课件 C语言顺序程序设计,C语言数组,C语言循环控制,C语言预处理命令,C语言文件操作指针,C语言选择结构程序设计,C语言结构体与共用体,C语言文件操作,C语言函数

    学习者会学习如何定义、调用函数,以及参数传递和返回值的处理。 通过深入学习和实践这些知识点,你可以逐步精通C语言,为更高级的编程技术打下坚实基础,如操作系统开发、网络编程、数据结构和算法实现等。同时,...

    关于C语言中函数调用和参数传递机制的探讨.txt

    C语言中的参数传递主要分为两种方式:值传递和引用传递。 - **值传递**:最常用的方式,即实参的值被复制到形参中。这种方式下,对形参所做的修改不会影响实参。 - **引用传递**:通过传递指针来实现,即形参接收的...

    PSCAD之C语言接口

    在*.f文件中编写完相应代码后,接下来是编写C语言文件,这一步骤中需要注意函数名后面要多加一个下划线,所有参数都以指针形式传递。在C语言中定义的全局变量或存储变量需要通过PSCAD的公共数组来存储,且在函数末尾...

    c语言编程常用头文件,下载即可引用。

    在C语言编程中,头文件是至关重要的组成部分,它们包含了函数声明、宏定义和其他必要的编译时信息。这些头文件让程序员能够方便地使用标准库的功能,而无需编写所有功能的实现代码。以下是对"c语言编程常用头文件"的...

    C语言大全,C语言大全

    《C语言大全》会深入讲解指针的使用,包括指针的声明、赋值、解引用以及多级指针等。通过学习,你能明白指针如何作为数据的间接访问方式,以及如何利用指针实现动态内存分配和函数参数传递。 此外,书中还会涉及...

    c语言指针变量作为函数参数传递

    C语言中的函数参数传递有多种方式,其中最基础的包括按值传递和按引用传递。按值传递时,传递给函数的是变量的副本,而在函数内部对这些副本的任何操作都不会影响原始数据。按引用传递则允许函数直接操作原始数据,...

    c语言经典笔试题(非常全)_笔试_C语言例程_c语言笔试_

    了解函数的定义、调用、参数传递,以及返回值的使用,是C语言笔试中常见的考察点。特别是指针作为函数参数,可以实现对内存的直接操作,是C语言的一大特色。 再者,掌握控制流程语句,如条件判断(if-else)、循环...

    c语言 TC201E c语言 TC201E c语言 TC201E

    4. **指针**:指针的声明、赋值、解引用,指针与数组、函数的结合使用。 5. **结构体与联合体**:自定义数据结构,结构体内存对齐,结构体指针操作。 6. **内存管理**:动态内存分配(malloc、calloc、realloc、free...

    山西专升本C语言历年真题

    掌握指针的声明、初始化、解引用以及指针数组和指向指针的指针等高级用法,是提升C语言编程能力的关键。 在专升本考试中,考生还会遇到数组和字符串的应用。数组是一组相同类型的数据集合,而字符串在C语言中被视为...

    C语言函数大全超级完整版

    C语言支持两种参数传递方式:值传递和引用传递。值传递会创建形式参数的副本,对形式参数的修改不会影响到实际参数。而引用传递则是让形式参数成为实际参数的别名,对形式参数的改动会直接影响实际参数。 C语言函数...

Global site tag (gtag.js) - Google Analytics