值: a[i] *(a+i)
地址: &a[i] a+i
指针的赋值
int *p1,*p2,a=2,b=3;
p1=&a;//p1指向a
p2=&b;
p1=p2//将p1亦指向p2的指向(即b)
*p1=*p2//将p1指向的a赋值为p2指向的b(即a=b)
int p1=3,*p2,a=2;
p2=&a;
p1=*p2;//p1=p2指向的内容的值,即a,即2;
*p2=p1;//p2指向的内容的值赋为p1,即a=p1;
用指针进行数组的输入输出
输入一:
int *p,i,a[10];
p=a;
for(i=0;i<10;i++)
scanf("%d",p++);//p=a,p表示的是a[0]的地址,即&a[0];*p表示的是a[0]
输入二:
int *p,a[10];
for(p=a;p<(a+10);p++)
scanf("%d",p);
输入三:
int a[10],i;
for(i=0;i<10;i++)
scanf("%d",a+i);
输出一:
p=a;
for(i=0;i<10;i++)
pritnf("%d",*p++);//*p++即*(p++)
输出二:
for(p=a;p<(a+10);p++)
scanf("%d",*p);
输出三:
for(i=0;i<10;i++)
scanf("%d",*(a+i));
若想输出a数组的前100个数,可以用指针的方式提高速度
法一:
p=a;
while(p<a+100)
printf("%d ",p++);
法二:
p=a;
while(p<a+100)
{printf("%d ",*p);p++;}
若进行了p++,再用时需要初始化一下,如下:
int *p,i,a[10];
p=a;
for(i=0;i<10;i++)
scanf("%d",p++);
for(i=0;i<10;i++)
printf("%d ",*p++);
则输出与输入的数并不一一对应,因为,scanf进行完后p已经指向了a[9],应
int *p,i,a[10];
p=a;
for(i=0;i<10;i++)
scanf("%d",p++);
p=a;
for(i=0;i<10;i++)
printf("%d ",*p++);
指针与++
p++;*p a[1]
*(p++)与*p++ a[0],a[1]…...//*和++同优先级,结合方向为从右向左;先*p,再++
*(++p) a[1],a[2]……//先++p,再*
++(*p) 元素a[0]的值++
--和++同理
written by Sneexy