存放一个字符的地址的指针称为字符指针,存放一个整形变量的地址的指针称为整形指针,除此之外,存放一个数组地址的指针称为数组指针,存放一个函数地址的指针称为函数指针······(任何一个变量在内存中都有地址,任何地址 的存放都在指针里) 。
1.理解数组指针
首先,数组指针是数组还是指针?
答案是 数组指针属于指针。
int main()
{
int arr1[6]={1,2,3,4};//整形数组
char arr2[6]={'a','c','d','e'};//字符数组
int i=0;
int sz1=sizeof(arr1)/sizeof(arr1[0]);//求出arr1数组的长度
int sz2=sizeof(arr2)/sizeof(arr2[0]);//求出arr2数组的长度
int *ptr1=arr1;//在这里数组名代表的是首元素的地址,数组元素的类型是int
char *ptr2=arr2;//在这里数组名代表的是首元素的地址,数组元素的类型是char
//通过该指针有能力去访问数组中每一个元素
for(i=0;i<sz1;i++)
{
//printf("%d ",arr1[i]);
printf("%d ",*(ptr1+i));//两种表达方式意思完全相同
}
return 0;
}
2.理解函数指针和定义
函数指针为一个存放函数地址的指针
#include <stdio.h>
void test()
{
printf("hello\n");
}
int main()
{
printf("%p\n", test);
printf("%p\n", &test);
return 0;
}
代码的结果:
输出的是两个地址,这两个地址是 test 函数的地址。 那我们的函数的地址要想保存起来,怎么保存?
void (* pfun1)();
void *pfun2();
以上哪一个有能力存放test函数的地址呢?
pfun1可以存放。pfun1先和 * 结合,说明pfun1是指针,指针指向的是一个函数,指向的函数无参数,返回值类型为void。