指针

一次搞懂所有类型指针的自增

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]
 }

赞赏