c语言中的复杂声明理解方法

本文详细解析了C语言中的指针与数组概念,通过实际示例解释了不同类型的指针声明及其含义,并演示了一个包含函数指针的数组的具体用法。

从内到外的原则

优先级如下:() > [] > *

    1 声明中被括号括起来的那部分;

    2.后缀操作符:

          括号()表示这是一个函数,而

          放括号[]表示这是一个数组;

    3.前缀操作符:星号*表示这是一个“指向...的指针”。

demo1:“const char *p”、"char const *p"和"char * const p"的区别?

        1.const char *p:由*知道p为指针,再外层由char知道p为指向char的指针,最后一层const知道指针p所指向的char型的变量为只读的      (不能改变它所指向的字符的值)。

         2.char const *p:由*知道p为指针,再外层const知道p所指向的变量为只读的,最后一层char知道指针p所指向的变量类型为char(该            情况和1是等价的)。

        3.char * const p:由const知道p为只读的,在外层*知道变量p为指针变量,最后一层char知道只读的指针所指向的内容是char型的(不         能修改指针)。

demo2:定义一个包含N个指向返回指向字符的指针的函数的指针的数组。

        1.需要一个包含N个指针的数组变量,为*a[N]

        2.这些指针指向函数,为(*a[N])()

        3.这些指针指向的函数的返回值是指向字符的,为 char *(*a[N])();

通俗地讲,这是一个函数指针数组:

下面是它的使用方法:

#include<stdio.h>

char* fun1();
char* fun2();
char* fun3();
int main()
{

	char *(*c[3])();
    char* (*point)();
	c[0]=fun1;
	c[1]=fun2;
	c[2]=fun3;

	(c[0])();
	(c[1])();
	(c[2])();
	

	system("pause");
	return 0;
}
char* fun1()
{
	printf("岱宗夫如何\n");
	return NULL;
}
char* fun2()
{
	printf("齐鲁青未了\n");
	return NULL;	
}
char* fun3()
{
	printf("造化钟神秀\n");
	return NULL;	
}
运行结果:



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值