时间呀!等等我~
目录:
- 字符指针
- 数组指针
- 指针数组
- 函数指针
- 数组传参和指针传参
- 函数指针数组
- 指向函数指针数组的指针
- 回调函数
1.字符指针
一种指针类型为字符指针char*
int main()
{
char ch = 'w';
char *pc = &ch;
*pc = 'w';
return 0;
}
2.数组指针
上一节我们已经知道“指针数组”是数组了。那么现在的“数组指针”当然就是指针咯!
int *p1[10];
int (*p2)[10];
int (*p)[10];//p先和*结合,说明p是一个指针变量,然后指向整形数据的指针
这里要注意:[]的优先级要高于*号的,所以必须要加上()来保证p先和*结合。
我们再来看一段代码吧:
#include <stdio.h>
int main(){
int arr[] = { 1, 2, 3, 4, 5, 6 };
printf(" arr= %p\n", arr);//取整个数组
printf("&arr= %p\n", &arr);//取数组里面的首元素
printf(" arr+1= %p\n", arr+1);
printf("&arr+1= %p\n", &arr+1);
system("pause");
return 0;
}
运行结果:

上一节我们的【总结:以上结果可见数组名和数组首元素的地址是一样。数组名表示的是数组首元素的地址。】
但是看上面的代码结果发现:虽然&arr和arr值是一样的,但是意义不一样呐!
实际上:&arr表示的是数组的地址,而不是数组首元素的地址。数组的地址+1--->相当于跳过了整个数组的大小。
3.指针数组:
int* arr1[10];//整形指针的数组
char *arr2[4];//一级字符指针的数组
char **arr3[5];//二级字符指针的数组
4.函数指针
函数指针也可以解引用,得到的不是一个数据,而是一个函数。
我们来阅读两段有趣的代码:
//代码1
(*(void (*)())0)();
//代码2
void (*signal(int,void(*)(int)))(int);
代码2太复杂,来简化一下:
typedef void(*pfun_t)(int);
pfun_t signal(int,pfun_t);
以上的代码我们下一次详细讲解吧!~期待~
5指针和数组笔试题总结:
- sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。
- &+数组名,这里的数组名表示的是整个数组,取出的时候整个数组的地址。
- 除此之外所有的数组名都表示首元素的地址。
~bye~
博客主要介绍了多种指针类型,包括字符指针、数组指针、指针数组、函数指针等,还提及数组传参和指针传参、函数指针数组、指向函数指针数组的指针以及回调函数。同时总结了指针和数组笔试题中数组名在不同情况下的含义。
385

被折叠的 条评论
为什么被折叠?



