字符指针和函数
该节主要介绍字符串数组的指针,即关于字符串处理的函数的指针。
1、当字符串出现在程序中时,例如
printf("hello, world!");
是通过字符指针获取到它,printf函数接收到一个字符数组开始的地址,也就是说,字符串常量是通过指向它的首元素的指针获取到的。
2、字符串常量没有必要必须作为函数的参数,通常可以这样定义:
char *pmessage;
pmessage = "now is the time";
将指针变量pmessage指向字符串常量“now is the time"的开始地址,这种描述并不是字符串的复制,C语言不提供任何关于整个字符串的操作。
3、 char amessage[] = "now is the time";
char *pmessage = "now is the time";
amessage定义的是一个数组,大小是能容下初始化时的字符和‘\0’,数组中的元素可以改变,但是amessage始终指向那一块内存区域;而pmessage是一个指针,初始化时指向一个字符串常量,当然随后该指针也可以修改指向其他地方。
4、字符'\0'即NULL,ASCII码是0.
5、关于*和++或--的操作:
*t++:t指向的值先取出,然后t++;
*++t:t先自加,然后取出自加后的地址指向的值。
在栈中的习惯用法:
*p++ = val; /* push val onto stack */
val = *--p; /* pop top of stack into val */
6、在strcmp/strcpy函数中既可以用数组的形式操作,但习惯用法是运用指针来操作,例如:
strcpy函数中:
数组方法:
while ((s[i] = t[i]) != '\0')
{
i++;
}
指针方法:
while (*s++ = *t++)
{
;
}