1.ANSI C 使用类型void* 代替char *作为通用指针类型,即一个指向void类型的指针可以存放任何类型的指针,但它不能间接引用其自身;
2.指针和整数之间不能相互转换,但0是唯一的例外:常量0可以赋值给指针,指针也可以与常量0比较。程序中常用常量NULL代替0,符号常量NULL定义在标准头文件<stddef.h>中;
3.strstr()函数
包含文件:
string.h
函数名: strstr
函数原型:
1
|
extern
char
*
strstr
(
char
*str1,
const
char
*str2);
|
语法:
1
|
*
strstr
(str1,str2)
|
str1: 被查找目标 string expression to search.
str2: 要查找对象 The string expression to find.
返回值:若str2是str1的子串,则先确定str2在str1的第一次出现的位置,并返回此str1在str2首位置的地址。;如果str2不是str1的子串,则返回NULL。
例子:
1
2
3
|
char
str[]=
"1234xyz"
;
char
*str1=
strstr
(str,
"34"
);
cout << str1 << endl;
|
显示的是: 34xyz
4.argv相关容易混淆问题
main(int argc, char *argv[])
(*++argv)[0]和*++argv[0]的不同:
前者等价于argv[1][0],也就是第二个参数的第一个元素的值;
后者等价于argv[0][1],也可写为*(++argv[0]),也就是第一个参数的第二个元素的值。
5.任何类型的指针都可以转换成void * 类型,并且在将它转换回原来的类型时不会丢失信息。
6.复杂声明
int *f(); /* f:是一个函数,它返回一个指向int类型的指针 */
int (*pf)(); /* pf:是一个指向函数的指针,该函数返回一个int类型的对象 */
稍微复杂一点的:
char (*(*x())[])() /* x是一个函数,它返回一个指针,该指针指向一个一维数组,该一维数组的元素是指针,
这些指针分别指向多个函数,这些函数的返回值是char类型 */