#include <string.h> #include <stdio.h> int main() { char name[] = "mhm"; char name2[] = {'1', '2'}; printf("%s\n", name);//mhm printf("%s\n", name2);//12mhm,说明从低地址一直往高地址读,一直读到\0为止 printf("%p\n", name);//*******c68 printf("%p\n", name2);//********c66 //通过以上俩地址,可以看出,name先分配地址,位c68,c69,c70,c71,共4位,包括最后一位隐藏的\0 //name2分配地址位:c66,c67 //字符和数字分配内存地址不一样,数字全部是从高地址往低地址分配,字符串的第一个字节在低地址 printf("%s\n", &name2[1]);//2mhm 从name2的第1个地址开始读,即从‘2’开始读 char name3[] = "mhmlove\0yy"; printf("%s\n", name3);//mhmlove,说明,到\0就结束了 char name4[] = {'y', 'y'}; printf("%s\n", name4);//yymhmlove,说明,从低地址往高地址寻址,到\0就结束了 //一个汉字为3个字符 int size = strlen("我");// size为3 一直数,一直数到\0结束 printf("%d\n", size); size = strlen("我123");// size为6 一直数,一直数到\0结束 printf("%d\n", size); size = strlen(name3);//size为7,因为到mhmlove就结束了 printf("%d\n", size); //单独输出字符,不是字符串 printf("%c\n", name[2]);//输出m return 0; }