void ch_arr_test1()
{
//chArr0 :普通字符数组(结尾没有\0 或者): 与普通数值数组(eg:int类型的数组)定义、初始化、使用都一样;
//chArr0 :以%s打印,打印完已初始化的部分,还会一直打乱码,直到遇到'\0'才停止;有的编译器优化了,会整体先清,所以不会打印后面乱码;
char chArr0[10] = {'H', 'e', 'l', 'l', 'o'};
//chArr1、chArr2 :'\0' <==> 0, 二者的ASCII都是;二者与字符‘’不一样,字符‘’的ASCII是;
//chArr3 :编译器会自动在字符串尾部加上'\0', 所以chArr1、chArr2、chArr3:是一样的;
char chArr1[10] = {'H', 'e', 'l', 'l', 'o', 0};
char chArr2[10] = {'H', 'e', 'l', 'l', 'o', '\0'};
char chArr3[10] = "Hello";
//chArr4 : 空字符串,编译器也会自动在空字符串尾部加上'\0',所以sizeof(chArr4)为;
char chArr4[] = "";
char *pchArr5 = "Hello"; //和chArr0--4不同,这里pchArr5是个字符型指针,这里的“Hello”是字符串常量,存储在内存四区的数据区(又名全局区),不可以修改;
printf("0: %s size is %d strlen %d\n", chArr0, sizeof(chArr0), strlen(chArr0));
printf("1: %s size is %d strlen %d\n", chArr1, sizeof(chArr1), strlen(chArr1));
printf("2: %s size is %d strlen %d\n", chArr2, sizeof(chArr2), strlen(chArr2));
printf("3: %s size is %d strlen %d\n", chArr3, sizeof(chArr3), strlen(chArr3));
printf("4: %s size is %d strlen %d\n", chArr4, sizeof(chArr4), strlen(chArr4));
printf("5: %s size is %d strlen %d\n", pchArr5, sizeof(pchArr5), strlen(pchArr5));
for (int i = 0; i < sizeof(chArr0) / sizeof(chArr0[0]); i++) {
printf("%d ", chArr0[i]);
}
printf("\n");
for (int i = 0; i < sizeof(chArr1) / sizeof(chArr1[0]); i++) {
printf("%d ", chArr1[i]);
}
printf("\n");
for (int i = 0; i < sizeof(chArr2) / sizeof(chArr2[0]); i++) {
printf("%d ", chArr2[i]);
}
printf("\n");
for (int i = 0; i < sizeof(chArr3) / sizeof(chArr3[0]); i++) {
printf("%d ", chArr3[i]);
}
printf("\n");
for (int i = 0; i < sizeof(chArr4) / sizeof(chArr4[0]); i++) {
printf("%d ", chArr4[i]);
chArr4[i] = 'd';
}
printf("\n");
for (int i = 0; i < 10; i++) {
printf("%d ", *(pchArr5 + i));
//*(pchArr5 + i) = 'd';
}
printf("\n");
}
运行结果:
// 字符数组
void ch_arr_test2()
{
//chArr0: ‘\0' 后面不要直接连着数字,因为有可能几个数字连在一起刚好是一个转义字符,例如:'012' 就是'\n';
char chArr0[] = "\012abc";
printf("0: %s size is %d strlen %d\n", chArr0, sizeof(chArr0), strlen(chArr0));
for (int i = 0; i < sizeof(chArr0) / sizeof(chArr0[0]); i++) {
printf("%d ", chArr0[i]);
}
printf("\n");
//chArr1: 中的‘’就是普通字符‘’,ASCII为,可以正常打印显示
//chArr2、chArr3:中的'\0' <==> 0,ASCII 都为,是字符串结束标记,%s打印和strlen计算字符串长度,遇到'\0' 或者都会停止
char chArr1[10] = {'H', 'e', '0' , 'l', 'l', '0'};
char chArr2[10] = {'H', 'e', '\0', 'l', 'l', '0'};
char chArr3[10] = {'H', 'e', 0 , 'l', 'l', '0'};
printf("1: %s size is %d strlen %d\n", chArr1, sizeof(chArr1), strlen(chArr1));
printf("2: %s size is %d strlen %d\n", chArr2, sizeof(chArr2), strlen(chArr2));
printf("3: %s size is %d strlen %d\n", chArr3, sizeof(chArr3), strlen(chArr3));
for (int i = 0; i < sizeof(chArr1) / sizeof(chArr1[0]); i++) {
printf("%d ", chArr1[i]);
}
printf("\n");
for (int i = 0; i < sizeof(chArr2) / sizeof(chArr2[0]); i++) {
printf("%d ", chArr2[i]);
}
printf("\n");
for (int i = 0; i < sizeof(chArr3) / sizeof(chArr3[0]); i++) {
printf("%d ", chArr3[i]);
}
printf("\n");
}
运行结果: