1.在cout及多数C++表达式中,char数组名,指向char类型的指针以及用引号括起的字符串常量,都被解释为字符串第一个字符的地址。
char food[20] = "carrots";//字符数组初始化
cout<<food<<" at "<<(int*)food<<endl;
char *q = food;
cout<<q<<" at "<<(int*)food<<endl;
cout<<"This is const string variable."<<endl;
结果:
cout对象认为char的地址为字符串的地址,因此它打印地址处的字符,然后再打印后面的字符,直至遇到空字符('\0')位置。
char ch1 = 'h';
cout<<"ch1= "<<ch1<<endl;
cout<<"*(&ch1)= "<<*(&ch1)<<endl;
//cout将char指针当做字符串的地址
cout<<"(&ch1)= "<<(&ch1)<<endl;
结果:
提示:最后的(&ch1)=h?/ 的结果是不确定的,与内存数据有关。
2.字符数组赋值1)初始化赋值
2)利用strcpy或strncpy赋值
char food[20] = "carrots";//字符数组初始化
strcpy(food,"chicken");//字符数组赋值(一)
//当copy的字符个数大于目标数组长度时,将出现不会再最后添加'\0'
strncpy(food,"This is a demo that moon!",40);//字符数组赋值(二)
Tips:应使用strcpy和strncpy来将字符串赋给数组。