C语言字符串和string对象初始化添加问题讨论

    xiaoxiao2022-07-12  149

    char str1[]="hello world";//以字符串形式出现的,编译器会在结尾自动添加\0 const char *str2="hello world";//以字符串形式出现的,编译器会在结尾自动添加\0 //等价与const char *str2;str2="hello world";//str2的值为hello wolrd,即 char sts3[]={'h','e','l','l','0','/0'};//以列表初始化,需要手动添加\0 const char *str4={'h','e','l','l','0','/0'};//以列表初始化,需要手动添加\0 cout<<str1<<endl;//输出hello world,类比c语言printf("%s"),第一个元素的地址 cout<<&str1[0]<<endl;//与上式等价,输出hello world,第一个元素的地址就是hello world cout<<(int)str1<<endl;//输出指针变量在栈上的地址(10进制地址)等价与(int)&str1 cout<<&str1<<endl;//与上式等价,都是输出指针变量在栈上的地址(16进制地址)

    总结: 字符串字面值初始化char数组或者char指针,不要添加\0空字符,若使用列表初始化cha数组或者char指针则需要手动添加\0。

    在以下两中场合下,数组名并不是用指针常量来表示,就是当数组名作为sizeof操作符和单目操作符&的操作数时: 1、sizeof返回整个数组的长度,而不是指向数组的指针的长度。 2、取一个数组名的地址所产生的是一个指向数组的指针,而不是一个指向某个指针常量的指针。 &a后返回的指针便是指向数组的指针,跟a(一个指向a[0]的指针)在指针的类型上是有区别的。

    string s("hello world");//编译器自动在字符串字面值后添加\0, 所以允许使用空字符结束的字符数组来初始化string对象或为string对象赋值

    使用getchar()输入单个字符,使用putchar()输出单个字符 使用gets()输入一行字符串(仅仅回车\n表示结束输入,空格制表符不表示结束输入)(要使用gets,需要先使用getchar接收整数后的换行符) 使用puts()输出一行字符串

    最新回复(0)