C/C++指针与引用基本操作与应用(作为函数参数进行传递)

目录

    • 指针简介
    • 基本使用
    • 空指针(null pointer)
    • 指针平移
    • 引用(reference)
    • 值传递
        • 理论
        • 代码示例:
        • 运行结果
    • 引用传递
        • 理论:
        • 代码示例
        • 运行结果
    • 指针传递
        • 理论
        • 代码示例

指针简介

指针是一个值为内存地址的变量

基本使用

变量定义
int year ;  //定义变量

year = 2016 ;  //赋值
指针定义
int* ptr_year ; //定义指针

ptr_year = &year //赋值(赋地址)

C/C++指针与引用基本操作与应用(作为函数参数进行传递)_第1张图片

*ptr_year  = 1111  //修改0028FF44内的值


空指针(null pointer)

int *ptr1 = nullptr ; //等价于int *ptr1 = 0 ;
int *ptr2 = 0 ; //直接将ptr2初始化为字面常量0

指针平移

一般在指向数组时使用,我们知道数组的内存地址就是第一个值的内存地址

int a[] = {1,2,3,4,5} ; 
int *ptr ; 
ptr = a ; //即把数组首元素地址赋予指针ptr
*ptr++; --->指向第二个元素

引用(reference)

引用即别名–为对象起了另外一个名字

底层是指针比指针更高级些,Java就是以引用完全封装了指针

int  int_value = 1024 ;  //定义变量并赋值

int& refValue = int_value ; 
					//refValue指向int_value,是int_value的另一个名字
					/*引用必须初始化*/

refValue = 2048 ; //成功更改值

值传递

理论

形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说**,值传递是单向的**(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。

代码示例:
 #include
 using namespace std;

 /*值传递*/
  void change1(int n)
  {
	 cout << "值传递-函数操作地址" << &n << endl;/*显示的是拷贝的地址而不是源地址*/ 
	     n++;
}


int     main() 
{
	     int n = 10;
	     cout << "实参的地址" << &n << endl;
	     change1(n);
	     cout << "afterchange1(), n=" << n << endl;
            system("pause"); 
            return true;
}
运行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SqhWHmr2-1571815468156)(C:\Users\JunSIr\AppData\Roaming\Typora\typora-user-images\1571814544905.png)]
n的值未被改变

引用传递

理论:

形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数形参虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是主调函数放进来实参变量的地址被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量

代码示例
#include
 using namespace std;

/*引用传递*/
 void change2(int & n) 
 {
	     cout << "引用传递-函数操作地址" << &n << endl;
	     n++;	
}

int main() 
{
	   	    int n = 10;
	 	    cout << "实参的地址" << &n << endl;
			change2(n);
	   		cout << "afterchange2() n=" << n << endl;
    
            system("pause"); 
            return true;
}
运行结果

C/C++指针与引用基本操作与应用(作为函数参数进行传递)_第2张图片
被调用函数开辟的空间仍让存放实参地址

指针传递

理论

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

代码示例
#include
 using namespace std;

/*指针传递*/
 void change3(int *n)
 {
	      cout << "指针传递-函数操作地址 " << n << endl;
	 * n = *n + 1;	
}

int main() 
{
	   	    int n = 10;
	 	    cout << "实参的地址" << &n << endl;
			 change3(&n);
	   		cout << "after change3() n=" << n << endl;
    
            system("pause"); 
            return true;
}

运行结果

C/C++指针与引用基本操作与应用(作为函数参数进行传递)_第3张图片

你可能感兴趣的:(算法与数据结构基础,C/C++,指针,引用,作为函数参数)