力争最简单把*、&说清楚。
这两个符号有许多迷惑的地方。
先说 *
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++类有关的,正在整理,尔后也贴出来。先权当抛砖引玉。呵呵~