1、字符指针
在指针的类型中我们知道有一种指针类型为字符指针 char*
一般使用方式:
还有使用方式如下:
注意观察区别:%C 与 %S :
这种方式是将字符串的首地址放到指针中,通过指针可以找到该字符串(千万不要理解成将字符串放到指针里面去,这是不可能的)。(类似与数组名就是首元素地址,但是跟数组还是有所区别的,这个字符串是一个常量字符串,无法被改变,如下图:)
常量字符串不能改变
如果说我们想修改这个字符串,需要将其放入数组中,然后再去修改:
创建数组需要开辟空间,数组arr1和arr2在内存空间所在位置是不同的,所以arr1 != arr2;
char* p1 = “abcdef”; char* p2 = “abcdef”; "abcdef"是常量字符串,不能被修改,在内存空间所占位置固定,char * p1 = “abcdef”; 是将该常量字符串的首地址放到字符指针p1中,char* p2 = “abcdef”;
是将该常量字符串的首地址放到字符指针p2中。
也就是说p1和p2存放都是常量字符串"abcdef"的首地址,所以p1 ==p2。(注意:同样的常量字符串只会存一份,不会同时存两份,所以不会开辟不同的空间来存储。)
**总结: **
这里arr1和arr2指向的是一个同一个常量字符串。
C /C++会把常量字符串存储到单独的一个内存区域当几个指针。指向同一个字符串的时候,他们实际会指向同一块内存。但是用相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块。
所以arr1和arr2不同,p1和p2相同。
转载:https://blog.51cto.com/panyujie/3366280#1_24