指针
程序员文章站
2024-01-01 17:07:34
...
指针的分类
1.字符指针
2.数组指针
3.指针数组
4.函数指针
5.数组传参和指针传参
6.函数指针数组
7.指向函数指针数组的指针
8.回调函数
指针的概念
1.指针是个变量,用来存放地址
2.大小是固定的:32位-4个字节 64位-8个字节
字符指针
1.char*
int main()
{
char ch = 'w';
char *pc = &ch;
*pc = 'w';
return 0;
}
2.C/C++会把常量字符串存储到单独的一个内存区域
char str1[] = "hello bit.";
char str2[] = "hello bit.";
char *str3 = "hello bit.";
char *str4 = "hello bit.";
str1 and str2 are not same。
str3 and str4 are same。
指针数组
1.存放指针的数组
int* arr1[10]; //整形指针的数组
char *arr2[4]; //一级字符指针的数组
char **arr3[5];//二级字符指针的数组
数组指针
1.能够指向数组的指针
int (*p)[10];
p是一个指针,指向的是一个大小为10个整型的数组。()保证p先与*结合。
2.&arr与arr:
&arr表示数组的地址。+1后跳过整个数组的大小
arr表示数组首元素的地址
函数指针
#include <stdio.h>
void test()
{
printf("hehe\n");
}
int main()
{
printf("%p\n", test);
printf("%p\n", &test);
return 0;
}
此时输出的两地址相同,说明是否存在&并不会对取出的地址产生影响。
2.
int Add(int x,int y)
{
return x+y;
}
int main()
{
int sum=0;
int (*p)(int,int)=Add;//函数指针
sum=(*p)(3,4);//*可写可不写
printf("%d\n",sum);
}
将函数地址保存:void(*pfun);
函数指针数组
1.把函数的地址存到一个数组中,这个数组叫函数指针数组
int (*par[10])();
par与[ ] 结合,说明其为数组。数组的内容是int(*)()类型的函数指针
2.
int main()
{
int (*p[4])(int,int)=Add;//函数指针数组
sum=(*p)(3,4);//*可写可不写
}
指向函数指针数组的指针
1.是一个指针。该指针指向一个数组。该数组中的元素都是函数指针。
int main()
{
int (*p[4])(int,int)=Add;//函数指针数组
p1=&p;
}
p是一个数组,数组中4个元素。每个元素是一个函数指针。所以p为函数指针数组。&取出函数指针数组的地址赋给p1。所以p1是一个指向p的指针。
int (* (*p2)[4])(int,int)=&p;//指向函数指针数组的指针