一、和运算符的结合
已知:*自右向左结合 ,()优先级高于*
假设已有语句:
int a[10],*p;
p=a;
考试会出的有:
*(p++) 指先取*p的值,然后使p加1: 输出a[0]
*(++p) 指先使p加1,然后再取*p: 输出a[1]
++(*p) 指p所指元素先加1:即++a[0]
(*p)++ 同理:即a[0]++
二、各种表达方式
元素 地址
a[i] &a[i]
*(a+i) a+i
a[i][j] &a[i][j]
a+i*m+j &(a+i*m+j )
*(*(a+i)+j) *(a+i)+j
*(a[i]+j) a[i]+j
三、交换值
最安全的做法,a、b、*p1、*p2的值均改变:
int temp,*p1,*p2;
int a,b;
a=3;
b=4;
p1=&a;
p2=&b;
t=*p1;
*p1=*p2;
*p2=t;
也能输出交换值的方法,但a、b的值未改变:
int *p,*p1,*p2;
int a,b;
a=3;
b=4;
p1=&a;
p2=&b;
p=p1;
p1=p2;
p2=p;
printf("%d %d\n",a,b);
printf("%d %d",*p1,*p2);
此时输出的结果为:
3 4
4 3
四、需要指回a[0]的程序有
用指针方法对10个整数按由小到大顺序排序:
#include<stdio.h>
int main()
{void sort(int x[ ],int n);
int i,*p,a[10];
p=a;
printf("input 10 numbers:");
for(i=0;i<10;i++)
scanf("%d",p++);
p=a;
sort(p,10);
for(i=0;i<10;i++)
{printf("%d\t",*p);
p++;
}
printf("\n");
return 0;
}
void sort(int x[],int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(x[i]<x[j])
{t=x[i];
x[i]=x[j];
x[j]=t;
}
}