1.数组指针
1.1 数组指针
定义
指向数组元素的指针
表示
int *p; //p代表一个指向数组a的指针
p=&a[0]; //p指向数组a的第一个元素的地址
p=a; //将数组名赋值给指针变量p
//数组名表示数组的第一个元素的地址
数组与下标
数组
1
3
5
7
11
13
下标
0
1
2
3
4
5
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("=",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("=",*(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("=",*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 宏定义后面不需要加“分号”
转载于:https://www.cnblogs.com/JonySen/p/6094971.html