指针与数组
void类型的指针可以存放指向任何类型的指针,但不能间接引用其自身.
有效的指针运算包括相同类型指针之间的赋值运算;指针同整数之间的加法或减法运算;指向相同数组中元素的两个指针间的减法或比较运算;将指针赋值为0或指针与0之间的比较运算.其它所有形式的指针运算都是非法的,例如两个指针间的加法,乘法,除法,移位或屏蔽运算;指针同float或double类型之间的加法运算;不经强制类型转换而直接将指向一种类型对象的指针赋值给指向另一种类型对象的指针的运算(两个打针之一是void *类型的情况除外).
字符复制:
void strcpy(char *s,char *t)
{
while(*s++=*t++)
{
;
}
}
进栈和出栈的标准用法:
*p++ = val;//将val压入栈
val =*--p;//将栈顶元素弹出到val中
指针数组:
char *lineptr[MAX];
它表示lineptr是一个具有MAX个元素的一维数组,其中数组的每个元素是一个指向字符类型对象的指针.
二维数组:
int day[] [13]; //(1)
int (*day)[13]; //(2)
(2)表示一个指针,它指向具有13个整形元素的一维数组
int *day[13] //(3)
(3)表示声明一个数组,该数组有13个元素,其中每个元素都是一个指向整形对象的指针.
指向函数的指针:
int (*comp)(void *,void *)
它表示comp是一个指向函数的指针,该函数具有两个void *类型的参数,其返回值类型为int.
指针的复杂表示:
x is a function returning a pointer to an array of pointers to funtions returning char
x是一个函数,它返回一个指针,该指针指向一个一维数组,该一维数组的元素为指针,这些指针分别指向多个函数,这些函数的返回值为char类型
表示为:
char (*(*x))p[])()