1.先看一个例题若已定义char s[10];则在下面表达式中不表示s[1]地址的是(B)。
A. s+1 B. s++ C. &s[0]+1 D. &s[1]
这是一个字符数组.s表示的是字符数组的首地址. s[1]的地址 就是s+1,但是不能用s++,它是一种后自增的运算.是一种将s使用后再结算的运算符.在赋值过程中,赋的是s[0]
(1)关于自增运算,先看这道题
strcpy( char *p, char *q)
{ while(*p) *p++=*q++;}
上面的代码,p和q分别指向两个字符串.先解释下while(*p)表示判断p指向是字符串的末尾,*p指向字符串末尾"\0"时为0;在这里说明下,!*p表示判断不为0; wihle(p)判断是否为空,当指针的值是0的时候,即为空.
*p++=*q++;
先运算等号 右边 *q++ 先取q的值,赋值给左边,再自增加1; 左边 *p++ 同上,取q值,就是获取等号右边的q;
2.字符串的赋值,说明一点
确定数组下标赋值注意: char* a[5] = "Good!"; 代码会报错,因为数组的元素个数不够.字符串后面自带空格符,也会占一个元素位置.
3.字符串输出注意
char *s = "abcde"; s+= 2;
printf("%d\n",s); //这里输出的是s得地址.
printf("%s\n",s); //这里输出的是以s为首地址的字符串. 结果是: cde