弹幕网站如何做/google关键词seo
字符指针和字符数组是两个不同的东西,但他们之间又有着许多联系,既是考点,也是易混淆的点.
字符指针
字符指针,本质上是一个指针,它是用来指向一个字符串的,因为C语言中没有字符串类型,所以就需要使用字符指针了,当然,字符数组也是可以的
字符指针创建方式
char* ch = "abc";
字符指针存在常量区,所以ch1[1] = 2;
这种形式是不对的.因为这样改变了常量
字符指针指向字符串的首元素地址,如何证明,其实也好办.
char* ch1 = "abc";printf("%p\n", ch1);
while (*ch1)
{printf("%p\n", ch1);ch1++;
}
这样就发现ch1,表示的地址是和首元素地址一致的
那么其实字符指针++就是一次跳过一个字节,指向下一个字节.通过这个程序还能发现,我们并没有在ch1所指的字符串后手动放上一个\0
,但是这里循环的结束条件又确实是*ch1!='\0'
,由此可见,这样被C系统默认当成字符串形式,会在结尾处加上一个\0
字符数组
字符数组本质上是一个数组
声明形式
char chr[]="abc";
char chr1[]={"abc"};
char chr2[]={'a','b','c','\0'};
这里第一种和第二种是完全等价的,而第三种因为是存放单个的字符在里面,如果你不手动存放一个字符\0(字符串结束标志)在里面,那么他就不会被当成一个字符串了,所以如果输出它也就有问题了.
当然,这里指定了数组的大小后,系统也会默认把后面变成\0
因为这样输出一个字符串,它找不到结束的标志了,所以就继续向后取内存中的数,直到找到\0为止
数组名是常量名,不能用数组名++操作,如下
这里会报错,因为数组名是常量,不可修改
但是因为数组名存在栈区,栈区,就理解为内存中可修改的区域,内容是可以被修改的,所以里面的元素可以改变