1.字符数组与字符串的区别?
字符串要有结束标记’\0‘,有’\0‘的符数组才能叫字符串,打印时读到’\0‘就结束,在字符数组初始化时比如char str[]=“abc",会默认在结尾加个'\0’,数组长度4因为‘\0’也占一个字符
char arr[10]={'a','b','c'}; 其他元素默认0因此打印时也可以正常结束
char arr2[5]; arr2[0]='a',arr2[1]='c',arr2[2]='f';
打印时arr2就不可以正常结束,因为没有'\0',其余元素也没有进行初始化
char arr3[]={‘a','b','c'};由于[]中没有给值所以arr3的长度是根据给的元素的个数算,也就是3自然也就不会有0,所以arr3不能正常结束打印。
2.字符串常量的创建过程?
答:char str[]=”abc“时,首先会在常数区创建一个字符串常量”abc“,”abc“代表的是字符串常量在常数区的地址,再将字符串常量拷贝进栈区的str字符数组。
3.char*p="abc";*p-=32;的bug原因?
答:”abc“是字符串常量p只是指向这个常量的指针,而常量是不可被修改的所以会报错。
4.char str[]="abc"与char *str="abc"的区别?
char str[]="abc"首先会在常数区创建一个字符串常量”abc","abc"代表的是字符串常量在常数区的地址,再将字符串常量拷贝进栈区的str字符数组sizeof(str)得到是数组空间大小
可以str[偏移量]来对栈区数组内的元素改变
数组名是地址常量str的指向不可以改变,他只能指向数组在栈区的地址
char*str="abc"只是创建了一个叫str并指向这个常量的指针
sizeof(str)得到是指针空间大小
无法通过指针str来改变常数区的字符串常量
str可以改变指向