结果分析:因为在输入的时候“\0"占用的是两个字符,str[5] = ‘’,str[6]=‘0’;所以第二次输出的结果是”hello\0world“
#include <iostream> #include<cstdio> #include<cstdlib> using namespace std; int main(){ char * str = "hello world!";//新一代的编译不能通过,因为“hello world”在常量区,他属于不可以改变的区域 char st[6] = "hello";//而数组是将"hello world" 拷贝一份到栈区,而st的就是这个字符串的首地址。 *(st+1) = 'i';//正确,是因为str在栈区分配的空间,可以修改的。 *(str+1) = 'i';//错误,因为str指向的是一个常量区,他的内容是不可以改变的。 数组名是一个常量指针,是不可以被"++"或“--”(这里没有出现) str = st;//这是可以的,因为指针之间是可以相互的赋值。 printf("str:%s,st:%s",str,st); return 0; }1.数组名代表了一个指向数组首元素的常量指针,一经定义,不可更改,数组名作为常量指针,其类型与数组元素类型相同。指针是变量指针,定义之后仍可更改,其类型在定义时确定。 2.当出现sizeof,和&操作符时,str为数组首元素的地址,&str表示数组的地址(上升到了一个数组为整体),数组名不再当成指向一个元素的常量指针来使用(而是作为一个数组来使用),而指针仍当成指向一个元素的变量指针来使用。