读书笔记--C和指针---第13章---高级指针话题

2013年9月26日9:43:55

1. 各个数据的类型

	int a;//a是一个整型变量
	int *a;//a是一个指针变量,它指向整型,即一个指向整型的指针
	int **a;//a是指针的指针,它指向的是整型
	
	int a[10];//a是一个数组,它里面的元素是整型数据
	int *a[10];//下标的优先级高于间接访问操作符,所以a先和[10]结合,再和*结合
            	//所以,a是一个数组,它的元素类型是指向整型的指针 (称之为:指针数组,核心是数组,其中元素是指针)
	int (*a)[10];//a先和间接访问操作符结合,再和取下标结合
            	//所以,a是一个指针,它指向的是一个整型数组  (称之为:数组指针,核心是指针,指向的是数组)
	
	int a();//a是一个函数,此函数无形参输入,返回值为整型
	int *a();//函数调用符的优先级高于间接访问操作符,所以a先和()结合,再和*结合
	         //所以,a是一个函数,此函数的返回值是指向整型的指针
	int (*a)();//a先和间接访问操作符结合,再和函数调用操作符()结合
            	//所以,a是一个指针,它指向的是一个函数,此函数的返回值是一个整型值
            	//即,a是一个函数指针,它所指向的函数返回一个整型值  (称之为:函数指针)
	          
	int (*a[])();//先对括号内表达式*a[]进行求值,所以a是一个元素为某种类型的指针的数组,即它是一个数组,其元素类型是指针,但此指针的指向还没确定
	             //再结合函数调用符,所以a是一个数组,数组元素类型是函数指针,它所指向的函数的返回值是一个整型值
	int *(*a[])();//此指令和上面的区别是,多了一个间接访问操作符。
	              //所以此声明创建了一个指针数组,指针所指向的类型是返回值为整型指针的函数。区别只是在所指向的函数的返回值类型。
	/*
	总结:
	简介访问操作符*的优先级很低,它低于下标[],函数调用符()等。
	最先和变量名a结合的,也就是最里层的最核心的最根本的,这个就决定了a到底是什么东西。
	而返回值,应该看表达式的最外层。
	*/


你可能感兴趣的:(C,读书笔记,C,指针)