力争最简单把*、&说清楚

类别:VC语言 点击:0 评论:0 推荐:

力争最简单把*、&说清楚。
这两个符号有许多迷惑的地方。
先说 *
1.定义指针用。
int i=6;
int * p; 定义指针
p = &i;   此处&是取地址,下面有说

2.取值用。
int i=6,j;
int * p;  定义指针
p = &i;   此处&是取地址,下面有说
j = * p; 取值

3.乘法用。
int a=5,b=6,c;
c = a * b; hehe~,这一点谁都不会混。

再说 &
1.定义引用用。
int i=6;
int &m=i; 定义引用

2.取地址用。
int i=6;
int * p;  定义指针
p = &i;  即为取地址

3.按位与 和上面情况一样,不会混淆,别不多说。:)

定义指针、取值、定义引用、取地址,这些易混淆,看下面例子。

void Test()
{
 int i=6,j;
 int &m=i; 定义引用
 int * p1=NULL,* p2=NULL; 定义两个指针

 p1 = &i; 取地址
 p2 = &m; 取地址(取i的引用m的地址)
 
 j = * p1; 取值
 j = * p2; 取值
 m++;
 j = i;  i也增加了
}
单步可看到更多信息:
 i = 6; &i = 0x0086d7d0
 m = 6; &m = 0x0086d7d0
 m和i的地址一样,所以里面的值也绝对是一样的。m是i引用(可以这么说,m就是i),对m的操作就是对i的操作,同样对i的操作也就是对m的操作。引用就是别名。m就是i,i就是m。再举个例子,张三,在公司都喊她小张,今天员工甲给小张300RMB,员工乙给小张500RMB,现在问供给了张三多少RMB? 800。:)张三就是小张,小张就是张三。

 p1 = 0x00867d0; * p1 = 6; &p1 = 0x0065fdec;
 p2 = 0x00867d0; * p2 = 6; &p2 = 0x0065fde8;
 p1、p2两个指针,内容一样都是0x00867d0。她们两个指向同一个地址,所以有 * p1 等于 *p2 都是6。但她们两个所在的地方不一样,所以&p1和&p2不一样。

以上只是C++里面有关的且只是一部分。和C++类有关的,正在整理,尔后也贴出来。先权当抛砖引玉。呵呵~

本文地址:http://com.8s8s.com/it/it2932.htm