ericasadun 2020-03-06
#include <stdio.h> #include <stdlib.h> void swap_t(int*a,int*b) {int p; p=*a; #借助指针,交换变量值 *a=*b; *b=p; } int main() { int a,b; a=6,b=5; #a,b的地址不变,但是经指针操作后其中的值交换 int *p,*q; #声明变量上,一般变量是被分配合法地址的,但是指针变量p是有地址的,但是p的内容可能是非法地址。 p=&a; q=&b; swap_t(p,q); #单向传递:只进不出(数值无法回传)swap函数结束后,p,q不变 printf("%d,%d",*p,*q); }
数组与指针 a[i]=>*(a+i),&a[i]=>(a+i) 等效 0x0001 p++; *p; 0x0002 *p++与*(p++)一致,++与*优先级一致,右结合性,p++:第一步取p的值,*p,后p自增 0x0003 *(++p):先自增,后取p,后*p 因为C++编译器认为*和++是同优先级操作符,它们的结合性都是从右至左,这样一来,对于*p++来说,++只作用在p上而不会作用在(*p)上,所以*p++和*(p++)的效果完全一样!