您的位置:首页 > 编程语言 > C语言/C++

【C语言-18】指针的进阶知识点

2019-05-28 17:22 162 查看
[code]时间呀!等等我~

目录:

  1. 字符指针
  2. 数组指针
  3. 指针数组
  4. 函数指针
  5. 数组传参和指针传参
  6. 函数指针数组
  7. 指向函数指针数组的指针
  8. 回调函数

1.字符指针

一种指针类型为字符指针char*

[code]int main()
{
char ch = 'w';
char *pc = &ch;
*pc = 'w';
return 0;
}

2.数组指针

上一节我们已经知道“指针数组”是数组了。那么现在的“数组指针”当然就是指针咯!

[code]int *p1[10];
int (*p2)[10];
int (*p)[10];//p先和*结合,说明p是一个指针变量,然后指向整形数据的指针

这里要注意:[]的优先级要高于*号的,所以必须要加上()来保证p先和*结合。

我们再来看一段代码吧:

[code]#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.指针数组:

[code]int* arr1[10];//整形指针的数组
char *arr2[4];//一级字符指针的数组
char **arr3[5];//二级字符指针的数组

4.函数指针

函数指针也可以解引用,得到的不是一个数据,而是一个函数。

我们来阅读两段有趣的代码:

[code]//代码1
(*(void (*)())0)();
//代码2
void (*signal(int,void(*)(int)))(int);

代码2太复杂,来简化一下:

[code]typedef void(*pfun_t)(int);
pfun_t signal(int,pfun_t);

以上的代码我们下一次详细讲解吧!~期待~ 

5指针和数组笔试题总结:

  • sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。
  • &+数组名,这里的数组名表示的是整个数组,取出的时候整个数组的地址。
  • 除此之外所有的数组名都表示首元素的地址。

 

 

 

 

 

~bye~

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: