值传递
引用传递
指针传递
地址的值
地址的引用
要改变的是指针 (传递指针的指针)
要改变的是指针指向的内容 (传递指针,即内容的指针)
给地址赋值与往地址存放数据
1、指针是一个数据的地址,同时也是一个数据(变量或者常量)
一个数据本身就是有地址和值,指针不过是一个地址值数据,即一个地址里存储的是另一个值的地址的数据。
2、值传递和引用传递的相对意义
对于传递的参数如果是一个指针的话,这个是有相对的意义的
对于
*P = AAA
地址 | 值 | 代码中的表示 |
0x01 | 0x02 | &P |
0x02 | 0x03 | P |
0x03 | AAA | *P |
0x04 | BBB |
|
0x05 | CCC |
|
从上面表中,可以有下面的解说
1)地址是不变的,可以改变的是值
2)修改指针的值,即指针指向其它对象,其实就是把指针的值改变了,如P=0x04,P就指向了BBB,即*P = BBB了。如下表
地址 | 值 | 代码中的表示 |
0x01 | 0x02 | &P |
0x02 | 0x04 | P |
0x03 | AAA |
|
0x04 | BBB | *P |
0x05 | CCC |
|
3)修改指针的指向的对象的值,如*P = CCC,如下表
地址 | 值 | 代码中的表示 |
0x01 | 0x02 | &P |
0x02 | 0x03 | P |
0x03 | CCC | *P |
0x04 | BBB |
|
0x05 | CCC |
|
4)修改指针的地址,如&P = 0x05,如下表
地址 | 值 | 代码中的表示 |
0x01 | 0x05 | &P |
0x02 | 0x03 |
|
0x03 | CCC |
|
0x04 | BBB |
|
0x05 | CCC | P |
… |
|
|
CCC | DDD | *P |
5)给地址赋值,此时地址就是一个变量,即变量的值发生变化了;往地址存数据,地址不变,变是的地址存储的内容