&与*运算符
我们把&叫做取址运算符,用来获取某个变量的地址,比如:
int i = 1;
int *p = &i;//p is reference of i, 这里把p当做是对i的一个引用(reference)
我们又把*叫做解引用(dereference)运算符,与&运算符互为逆运算。比如:
printf(“*p is:%d,i is %d\n”, *p, i);// *p is dereference for i ,*p equals i,*p代表的就是i
*p += 1;//把p所指向的地址的内存(i)的值加1
printf("*p is:%d,i is %d\n", *p, i);
这里*p代表的就是i。
*p中,p必须是有效的地址,否则会引发程序崩溃。比如:
int *p = NULL;
*p = 0;//此时,p无NULL地址,会引发程序异常
图解指针*与&的含义:
char i,j,*p1,*p2;
i='a';
j='b';
p1=&i;
p2=&j;//图1所示,p1指向i,p2指向j
*p2=*p1;//图2所示,把i的值赋值给了j。因为*p2为j,*p1位i,所以等价为j=i;
p2=p1;//图3所示,把p1的值,赋值给p2,因此,p2中存放的也是i的地址,所以p2指向了i;