C语言之指针

社会主义新天地 提交于 2020-03-06 12:00:24
#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)#每次从a(首地址算起)即重新计算地址,p++(有规律的改变当前地址的值省去了重新计算)效率更高,但是其不够直观,数组a 不能a++的原因:a即是数组首地址是一个常量,而p对应是变量,他可以改变内部存储的地址实现p++

区分几种形式:
0x0001
p++;  //p++可以把p++看成两步,第一步返回了p的值,第二步对p自加操作有;p实现了自增
*p;    //*(p+1)
0x0002
*p++ 与*(p++)//++与*同优先级,右结合性,有因为是后加加,所以第一步返回p的值,后*p,后p自增
0x0003
*(++p)  //第一步对p自加操作,第二步返回了p的值,之后*p(前加加的缘故)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!