内容
1.指针的概念
2.值传递与地址传递
4.代码示例
———————————————————————————————————
*1.指针
(1)作用:通过指针间接访问内存。
• 内存编号是从0开始记录的,一般用十六进制数表示。
• 可以利用指针变量保存地址
(2)定义语法: 数据类型 * 指针变量名;
例:
int a = 10;
Int * p; //定义指针:
p=&a; //利用指针保存地址
int * p = &a;
*p= 100; //通过指针p存的地址找到a的内存,并且修改值10为100
const int *p1 = &a;
int * const p2=&a;
const int* const p3=&a;
- 解引用:* 指针名 :就可找到指针指向的内存数据。
- 常量指针:const修饰指针 ——指针的指向可以改变,值不可改变
- 指针常量:const修饰常量——指针的指向不可改变,值可以改变
- const既修饰指针又修饰常量——指针的指向和值都不可改变
- 另外,在32位操作系统下,不管是什么类型的指针,都占4个字节的内存大小。64位下为8字节的内存大小。
*2.值传递与地址传递
(1)值传递:就是函数调用时实参将数值传递给形参,并且形参改变,实参不发生改变。
(2)地址传递:利用指针作为函数参数时,可以改变实参,实参跟着形参变。
*如果需要实参随着形参改变时,在函数调用时选择地址传递,反之选择值传递。
*3.代码实现
#include<iostream>
using namespace std;
//分别进行值传递和地址传递,结果比较实参和形参的变化
void swap01(int x,int y)//定义一个交换函数,进行值传递
{
int temp = x;
x = y;
y = temp;
}
void swap02(int * p1,int *p2)
{
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int main()
{
int a=1;
int b=2;
cout<<"a"<<"="<<a<<" "<<"b"<<"="<<b<<endl;
swap01(a,b);
cout<<"a"<<"="<<a<<" "<<"b"<<"="<<b<<endl;
swap02(&a,&b);
cout<<"a"<<"="<<a<<" "<<"b"<<"="<<b<<endl;
system("pause");
return 0;
}
结果为
结果表明:
进行值传递之后,实参未发生变化;进行地址传递之后,实参发生变化。