c——复合类型——字符串

来源:互联网 发布:Sql中not in的效率 编辑:程序博客网 时间:2024/04/30 02:28

字符串

void arr_str(){    char animal1[] = "horse";    char animal2[] = "horse\0";    char animal3[] = "horse\0donkey";    char animal4[] = {"horse"};        printf("sizeof(animal1) = %lu, last char = %d\n", sizeof(animal1), animal1[sizeof(animal1) - 1]);    printf("sizeof(animal2) = %lu, last char = %d\n", sizeof(animal2), animal2[sizeof(animal2) - 1]);    printf("sizeof(animal3) = %lu, last char = %d\n", sizeof(animal3), animal3[sizeof(animal3) - 1]);    printf("sizeof(animal4) = %lu, last char = %d\n", sizeof(animal4), animal4[sizeof(animal4) - 1]);        char* pAnimal1 = "horse";    char* pAnimal2 = "horse\0";    char* pAnimal3 = "horse\0donkey";        printf("sizeof(animal1) = %ld, pAnimal1 = %p, &animal1 = %p\n", sizeof("horse"), pAnimal1, &"horse");    printf("sizeof(animal2) = %ld, pAnimal2 = %p, &animal2 = %p\n", sizeof("horse\0"), pAnimal2, &"horse\0");    printf("sizeof(animal3) = %ld, pAnimal3 = %p, &animal3 = %p\n", sizeof("horse\0donkey"), pAnimal3, &"horse\0donkey");        printf("strlen(animal1) = %lu\n", strlen(animal1));    printf("strlen(animal2) = %lu\n", strlen(animal2));    printf("strlen(animal3) = %lu\n", strlen(animal3));    printf("strlen(pAnimal1) = %lu\n", strlen(pAnimal1));    printf("strlen(pAnimal2) = %lu\n", strlen(pAnimal2));    printf("strlen(pAnimal3) = %lu\n", strlen(pAnimal3));}
output:
sizeof(animal1) = 6, last char = 0sizeof(animal2) = 7, last char = 0sizeof(animal3) = 13, last char = 0sizeof(animal4) = 6, last char = 0sizeof(animal1) = 6, pAnimal1 = 0x100000e72, &animal1 = 0x100000e72sizeof(animal2) = 7, pAnimal2 = 0x100000fa4, &animal2 = 0x100000fa4sizeof(animal3) = 13, pAnimal3 = 0x100000fab, &animal3 = 0x100000fabstrlen(animal1) = 5strlen(animal2) = 5strlen(animal3) = 5strlen(pAnimal1) = 5strlen(pAnimal2) = 5strlen(pAnimal3) = 5
结论:
  • 字符串本质是匿名字符数组,只不过末尾会追加一个空字符‘\0’作为字符串结束标志,即last数组元素为空字符‘\0’
  • 可用字符串初始化字符数组
  • 字符串赋值给字符指针本质是把匿名字符数组赋值给字符指针,数组作为操作数时隐式转换为数组元素类型指针,即char*,指向数组第一个元素
  • 字符串函数处理字符数组或字符串时(字符串参数为char*或const char*类型),遇第一个空字符‘\0’结束,不再处理之后字符
注:wchar_t同理,wchar_t类型空字符为L'\0'
0 0
原创粉丝点击