1.数组指针
1.1 数组指针 | |||||||||||||||||
定义 | 指向数组元素的指针 | ||||||||||||||||
表示 | int *p; //p代表一个指向数组a的指针 | ||||||||||||||||
p=&a[0]; //p指向数组a的第一个元素的地址 | |||||||||||||||||
p=a; //将数组名赋值给指针变量p //数组名表示数组的第一个元素的地址 | |||||||||||||||||
数组与下标 |
| ||||||||||||||||
1.2 数组的引用 | |||||||||||||||||
下标法 | 数组名法 | 指针法 | |||||||||||||||
#include <stdio.h> #define N 6 //宏定义 void main(void) { int a[N]={0}; int i; for(i=0;i<N;i++) { a[i]=i; } for(i=0;i<N;i++) { printf("%3d",a[i]); } } | #include <stdio.h> #define N 6 //宏定义
void main(void) { int a[N]={0}; int i; for(i=0;i<N;i++) { *(a+i)=i;//数组名法 } for(i=0;i<N;i++) { printf("%3d",*(a+i)); } } | void main(void) { int a[N]={0}; int i; int *p=NULL; p=a;//对指针进行按数组名赋值 for(i=0;i<N;i++) { *p++=i;//指针法 } for(i=0,p=a;i<N;i++) { printf("%3d",*p++); } } | |||||||||||||||
2. 返回指针值的函数
格式 | 类型说明符 *函数名(参数列表) | ||
样例 | int *GetMax (int *p, int n, int *index) //参数列表:*p是数组指针,n是数组长度; *index数组中最大元素的下标; 返回值:数组中最大元素的指针 | ||
返回函数最大元素值和其对应地址 | #include <stdio.h> #define N 6
int *GetMax(int *p, int n, int *pIndex) { int i ; int *Max=NULL; Max = p; for(i=0;i<N;i++) { if (*(p+i)>*Max) { Max=p+i; //将Max指向数组的当前元素 *pIndex=i; //修改数组最大值的下标 } } return Max; } void main (void) { int a[N]={1,3,5,7,11,13}; int index=0;//数组a最大值的下标 int *pMax=NULL; pMax=GetMax(a, N,&index); printf("Max=%d,index of Max=%d",*pMax,index); } | #include <stdio.h> #define N 6
int *GetMax(int *p, int n) { int i ; int *Max=NULL; Max = p; for(i=0;i<N;i++) { if (*(p+i)>*Max) { Max=p+i;//将Max指向数组的当前元素 } } return Max; } void main (void) { int a[N]={1,3,5,7,11,13}; int index=0;//数组a最大值的下标 int *pMax=NULL; pMax=GetMax(a, N,&index); printf("Max=%d,index of Max=%d",*pMax,pMax-a); }
| |
3. 指向函数的指针
格式 | 类型说明符(*指针变量名)() |
如:int (*p)() | |
说明 | C 语言程序在编译时,每一个函数在内存中都有一个入口地址,该入口地址就是函数指针所指向的地址 |
调换函数值 | #include <stdio.h> #define N 6 void swap(int *ptrx, int *ptry) { int temp; temp = *ptrx; *ptrx = *ptry; *ptry = temp; return; } void main(void) { int a=3,b=5; void (*p)(int,int); p = swap; printf("a=%d,b=%d\n",a,b); //交换前 p(&a,&b); printf("a=%d,b=%d\n",a,b); //交换后 } |
4. 延伸:
4.1 :*p++-1的作用:先取*p的值先减1,再把p加1
#include<stdio.h>
void main(void)
{
int a[]={3,5,7};
int *p=NULL;
p=a;
printf("*p++-1=%d\n",*p++-1);
printf("current *p=%d\n",*p);
}
4.2 宏定义后面不需要加“分号”