int main()
{
char str1[]="abc";
char str2[]="a\0bc";
//字符数组(没有以'\0'结束)
char str3[]={'a','b'};
char str4[]="哈";
/*
1.printf()中的%s占位符,在输出字符串时,只匹配到'\0'字符结束
2.strlen()函数计算字符数量时同样只匹配到'\0'字符结束
3.str3[]没有存放结束符'\0',
因此用%s、strlen()时会匹配超出次字符串范围的'\0'作为结束位置
低位
内存位置 变量名称 存放内容
ff1 str4 "哈"
ff2 str3 {'a','b'}
ff3 str2 "a\0bc"
ff4 str1 "abc"
高位
因为内存中数组内容的存放顺序是从低位到高位(与变量存储方式相反)
因此在输出str3时会依次从内存中找到'a'、'b'再向高位找到str2的'a'
直到'\0'才结束
4.中文在64位编译器中占用3个字符
*/
printf("strlen(\"%s\")=%lu, strlen(\"%s\")=%lu\n",str1,
strlen(str1),str2,strlen(str2));
printf("strlen(\"%s\")=%lu, strlen(\"%s\")=%lu\n",str3,
strlen(str3),str4,strlen(str4));
char *p=str1;
/*
str1 --相当于-- 数组首地址(第一个元素的地址)
str1+1 --相当于-- 数组第二个元素的地址
*p --相当于-- p[0]
*(++p) --相当于-- p[1]
p --相当于-- 数组首地址
++p --相当于-- 数组第二个元素的地址
*/
//使用%c一定要保证后边的输出参数为值,而不是地址
//不能写成printf("%c",p)
printf("str1[0]=%c, p[0]=%c\n",str1[0],p[0]);
printf("*(str1+1)=%c, *(++p)=%c\n",*(str1+1),*(++p));
printf("-------------------------------\n");
char *p1="abc";
char *p2="a\0bc";
//数组如果设置为s1[2][3]则会因为长度不够无法存储'\0'
char s1[2][4]={"abc","def"};
char *p3[]={"ABC","DEF"};
/*
数组的名字相当于数组首元素的地址,指向字符串的字符指针所存放的地址也相当于字符串首地址
因此printf("%s",数组名字[数组首元素地址])
--相当于--
printf("%s",指针名字[数组首元素地址])
*s1 == *s1[0]
*p3 == *p3[0]
*/
printf("*p1=%c\n",*p1);
printf("*++p1=%c\n",*++p1);
p1--;
printf("p1[2]=%c\n",p1[2]);
printf("s1=%s\n",s1);
printf("s1[0]=%s\n",s1[0]);
printf("*p3=%s\n",*p3);
printf("strlen(\"%s\")=%lu, strlen(\"%s\")=%lu\n",
p1,strlen(p1),p2,strlen(p2));
printf("-------------------------------\n");
/*
size1=数组的总大小/数组单维度大小
size2=指针数组总大小/单个字符指针大小
*/
int size1=sizeof(s1)/sizeof(s1[0]);
int size2=sizeof(p3)/sizeof(char *);
printf("size1=%d, size2=%d\n",size1,size2);
for(int i=0;i<size1;i++)
{
printf("s1[%d]=%s\n",i,s1[i]);
}
for(int i=0;i<size2;i++)
{
printf("*p3[%d]=%s\n",i,p3[i]);
}
return 0;
}
输出结果
strlen("abc")=3, strlen("a")=1
strlen("aba")=3, strlen("哈")=3
str1[0]=a, p[0]=a
*(str1+1)=b, *(++p)=b
-------------------------------
*p1=a
*++p1=b
p1[2]=c
s1=abc
s1[0]=abc
*p3=ABC
strlen("abc")=3, strlen("a")=1
-------------------------------
size1=2, size2=2
s1[0]=abc
s1[1]=def
*p3[0]=ABC
*p3[1]=DEF