一次搞懂所有类型指针的自增
void main()
{
int ch[5]={1,2,3,4,5},*pl,i;
pl = ch;
printf("*pl++=%d\n",*pl++); //*pl++ 等于 *(pl++) 输出1 但ch[0]=2
printf("*pl=%d\n",*pl); //输出2
pl=ch;
printf("*++pl=%d\n",*++pl); //pl先自增,指向ch[1] 输出2
printf("*pl=%d\n",*pl); //输出2
pl=ch;
printf("++*pl=%d\n",++*pl); //先取址ch[0] 再自增 输出2
printf("*pl=%d\n",*pl); //输出2
printf("*(pl+1)=%d\n",*(pl+1)); //后一位是2 不变
pl=ch;
printf("(*pl)++=%d\n",(*pl)++); //取址ch[0] 再自增 输出2 值为3
printf("*pl=%d\n",*(pl)); //输出3
printf("*(pl+1)=%d\n",*(pl+1)); //后一位是2 不变
}
注意不要定义空指针
不知指哪可以赋值NULL
注意pa和p,不能直接scanf(“%d”,pa),指针未被分配内存,p可以
#include <stdio.h>
int main()
{
int ch[10],*p,*pa,a,flag=0;
for(p=ch;p<ch+10;p++)
{
scanf("%d",p);
}
pa=&a;
scanf("%d",pa);
for(p=ch;p<ch+10;p++)
{
if(*p==*pa)
{
printf("%d",p-ch+1);
flag=1;
}
}
if(!flag) printf("not found");
return 0;
}
行,列指针的用法
#define N 2
//列指针的使用
int findmax(int *pa)
{
int max,j,*pend;
max = *pa;
pend = pa+N*N-1;
for(;pa<=pend;pa++)
if(*pa>max) max=*pa;
return max;
}
//行指针的使用
int findmin(int (*p)[N])
{
int min,i,j;
min=**p;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(min>*(*(p+i)+j)) min = *(*(p+i)+j);
}
}
return min;
}
void main()
{
int a[N][N],*pa,max,min;
for(pa=a[0];pa<a[0]+N*N;pa++)
{
scanf("%d",pa);
}
max=findmax(a[0]);
min=findmin(a);
printf("MAX=%d\n",max);
printf("MIN=%d",min);
}
数组指针和指针数组
//数组指针和指针数组
void main()
{
//指针数组
char *weekday[]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
int n;
printf("n is :");
scanf("%d",&n);
if(n>=1&&n<=7)
{
printf("It's %s",weekday[n-1]);
}
else
printf("Error");
//行指针为数组指针 (*pa)[4]
}