首先要理解参数传递,参数传递分值传递,指针传递,引用传递。(就我自己理解,就是把实参对形参进行赋值)

值传递:

形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,

不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。

指针传递:

形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作

引用传递:

形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈

中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过

栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。

//简单介绍参数传递,但是主要是指针传递的介绍

实例1:指针传递

 #include<iostream>
using std::cout;
using std::endl; class Simple{
private:
//一般用来定义私有变量
public:
void function(int *stu);//指针作为参数传递
};
void main()
{ Simple *simple=new Simple();
int value = ;
int *pointer;
pointer = &value; //注意:不能直接对指针赋常量值,例 pointer=10(错),*pointer=10(错)
cout << &pointer << endl;//输出的是pointer的地址
cout << pointer << endl;//输出的是value的地址
cout << *pointer << endl;//输出的是value的值 //指针传参
simple->function(&value);//实参将值传给形参 stu=&value;//也可以simple->function(pointer);//结果一样
delete(simple);
system("pause");
}
void Simple::function(int *stu)
{ int *temp;
cout << (*stu) << endl;//输出传递的值,也就是value的值10
temp = stu;
cout << temp << endl;//输出的是value的地址
*temp = ;
cout << (*temp) << endl;//输出的是值30 }

实例2:指针的指针传递

 #include<iostream>
using std::cout;
using std::endl; class Simple{
private:
//一般用来定义私有变量
public:
void function(int **stu);//指针作为参数传递
};
void main()
{ Simple *simple=new Simple();
int value = ;
int *pointer;
int **temppointer;
pointer = &value; //注意:不能直接对指针赋常量值,例 pointer=10(错),*pointer=10(错)
temppointer = &pointer;//指针的指针 cout << &pointer << endl;//输出的是pointer的地址
cout << pointer << endl;//输出的是value的地址
cout << *pointer << endl;//输出的是value的值 cout << &temppointer << endl;//输出的是temppointer的地址
cout << temppointer << endl;//输出的是pointer的地址
cout << *temppointer << endl;//输出value的地址
cout << **temppointer << endl;//输出的是value的值
//指针传参
simple->function(&pointer);//实参将值传给形参 stu=&value;也可用//simple->function(temppointer);结果一样
delete(simple);
32    system("pause");
    }
void Simple::function(int **stu)
{ int **temp;
cout << (**stu) << endl;//输出传递的值,也就是value的值10
temp = stu;
cout << temp << endl;//输出的是pointer的地址
**temp = ;
cout << (*temp) << endl;//输出的是value的地址
cout << (**temp) << endl;//输出的是值30 }

c/c++指针传参的更多相关文章

  1. [ 随手记6 ] C/C++ 形参、实参、按值传参、指针传参、引用传参

    个人原创: 1. 形参:形式上的参数,一般多在函数声明.函数定义的参数上: 2. 实参:实体参数,有实际的值,在运算上被循环使用的值: 3. 按值传参:按值,就是把实际的值传给函数内部: 4. 指针传 ...

  2. C++单纯的指针传参的问题

    C++指针传参也是单纯的复制一份地址,如下代码: #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace st ...

  3. C++的结构体指针传参

    typedef struct node{int n;node *left;}*tnode; 传参的时候注意用** void init(node **nn);int main(){tnode nna;i ...

  4. python3.x 类似cpp引用指针传参修改

    #同名局部变量调用外部全局变量: num=100def fun(): global num#告诉编译器是全局的num num+=100 print(num)print(fun)print(fun()) ...

  5. C++二级指针和指针引用传参

    前提 一级指针和引用 已经清晰一级指针和引用. 可参考:指针和引用与及指针常量和常量指针 或查阅其他资料. 一级指针和二级指针 个人觉得文字描述比较难读懂,直接看代码运行结果分析好些,如果想看文字分析 ...

  6. C和C++引用传递和数组传参引用

    引用传递有两种传参方式,具体可参考文章 概括地讲,就是 *声明一个形参是指针,所以需要传递指针实参,对应的函数实现也应当遵循指针的语法.这种实现思路并不针对于C或者C++,因为它们都有指针,所以都可以 ...

  7. c指针与数组,传参问题,指针数组与数组指针的区别,二维数组动态内存分配

    一 数组的结构:顺序存储,看谭浩强中的图,牢记 1.数组名指代一种数据结构:数组 现在可以解释为什么第1个程序第6行的输出为10的问题,根据结论1,数组名str的内涵为一种数据结构,即一个长度为10的 ...

  8. 指针数组的初始化和遍历,并且通过for循环方式、函数传参方式进行指针数组的遍历

    /************************************************************************* > File Name: message.c ...

  9. C语言 指针在函数传参中的使用

    int add(int a, int b)   //函数传参的时候使用了int整型数据,本身是数值类型.实际调用该函数时,实参将自己拷贝一份,并将拷贝传递给形参进行运算.实参自己实际是不参与运算的.所 ...

随机推荐

  1. 如何为属性是disabled的表单绑定js事件

    $(document).click(function(e){ var el = e.target; if (el.tagName == 'INPUT') { $(el).removeAttr('dis ...

  2. OC 结构体

    void test() { // 这个机构只能在函数内部使用 // 定义一个名为Student的结构体类型 struct Student { int age; // 年龄 char *name; // ...

  3. python常见异常及解决方法

    异常1: ValueError: unsupported hash type sha224 ERROR:root:code for hash sha256 was not found. Traceba ...

  4. 七、IntelliJ IDEA 常见文件类型的图标介绍

    咱们已经了解了很多关于 IntelliJ IDEA 的内容啦,例如,在 Windows 系统下安装 IntelliJ IDEA.运行 IntelliJ IDEA .创建 Java 项目以及修改 Int ...

  5. 一步一步部署SSIS包图解教程

    本文就SQL统计分析SSIS包的部署进行一次详细的部署图解教程,Sql Server Integration Services 提供了非常简单的部署工具,利用这些工具可以方便地将包文件(*.dtsx) ...

  6. 【模板】各种背包问题&讲解

                                        背包问题集合 一般来说,动态规划(DP)都是初学者最难闯过的一关,而在这里详细解说动态规划的一种经典题型:背包问题. 这里介绍的 ...

  7. (转)HTML5之渐变

    <!DOCTYPE> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta h ...

  8. ImportError: No module named lmdb

    why? 具体原因没有查清楚.安装caffe时,按照要求安装了包,caffe用的好好的,而且我也用打好包的lmdb跑了程序了.可我今天想看一下我的打包数据是不是漏掉数据了,直接开个python窗口,i ...

  9. Git相关内容

    先聊一点关于gitlab的内容和github的内容 Gitlab和GitHub,都是我们可以存放代码库的地方.不过Gitlab可以免费的存储私人代码,GitHub需要花钱才能够存储私人代码库,不过我想 ...

  10. ajax请求相关问题

    Ajax中async:false/true的作用: async. 默认是 true,即为异步方式,$.ajax执行后,会继续执行ajax后面的脚本,直到服务器端返回数据后,触发$.ajax里的succ ...