说明文中*p++和*s++都是一个东西,不做字面上的统一了。
因为右结合性,*p++ 其实就是 *(p++)
1.strlen的实现
#include <stdio.h>
main(){
char str[]= "Abcde";
printf("\n string = %s length = %d \n",str,str_length(str));
}
int str_length (const char *s){
int length = 0;
while (*s++){
length++;
}
return (length);
}
其实*s++的过程
递增到最后一位就是\0,也就是“”.
注意:*s已经指向后面的内容了,就是乱码了
2.数组和指针这2种方式表示字符串的差异
2.1 数组不能直接当指针用, 数组名不能指针运算
也就是说数组名代表数组的首元素,它是一个指针常量,它的值在程序运行期间是固定不变的, *str++是不可以的;
ptr是指针变量当然可以实现ptr++的运算但是指针自然可以指针运算。
直接数组名++就报错了:
2.2 数组名不能直接赋值,但是指针可以
给数组名赋值就报错了:
第1次指针地址是:0x010f5860
递增到最后一位就是\0,也就是“”.
注意:*s已经指向后面的内容了,就是乱码了
2.数组和指针这2种方式表示字符串的差异
#include <stdio.h>
main( )
{
char str[]= "Abcde";
char* ptr = "12345";
*ptr++;
printf ("\n string = %s length = %d \n",ptr,str_length (ptr));
printf ("\n string = %s length = %d \n",str,str_length (str));
}
int str_length (const char *s)
{
int length = 0;
while (*s++)
{
length++ ;
}
return (length) ;
}
输出:
2.1 数组不能直接当指针用, 数组名不能指针运算
也就是说数组名代表数组的首元素,它是一个指针常量,它的值在程序运行期间是固定不变的, *str++是不可以的;
ptr是指针变量当然可以实现ptr++的运算但是指针自然可以指针运算。
直接数组名++就报错了:
2.2 数组名不能直接赋值,但是指针可以
给数组名赋值就报错了:
第1次指针地址是:0x010f5860