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

博客主要介绍了多种指针类型,包括字符指针、数组指针、指针数组、函数指针等,还提及数组传参和指针传参、函数指针数组、指向函数指针数组的指针以及回调函数。同时总结了指针和数组笔试题中数组名在不同情况下的含义。
时间呀!等等我~

目录:

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

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~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值