C++数据类型及字符串常见问题

1. C++中’a’与”a”的区别?

‘a’只能存放一个字符

“a”相当于一个字符数组,每个字符元素为单个字符,而且最后添加转义字符’\0’作为字符串数组的结尾。

图示如下:

2. C++中数组与结构体的异同点?

C++中的结构体只是为了兼容c而保留的,在C++里完全可以使用类来代替结构体。在类中使用结构体实际就是内部类的问题。把结构体看成一个没有成员函数的类。

就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构中声明不同的数据类型。第二,相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称是常量指针,所以不可以做为赋值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同。

数组的本质是使用数组名作为常量指针。一旦您把第一个元素的地址存储在 p 中,您就可以使用 *p*(p+1)*(p+2) 等来访问数组元素。

下面的实例演示了上面讨论到的这些概念:

  1. #include <iostream>  
  2. using namespace std;  
  3.    
  4. int main ()  
  5. {  
  6.    // 带有 5 个元素的双精度浮点型数组  
  7.    double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0};  
  8.    double *p;  
  9.    
  10.    p = balance;  
  11.    
  12.    // 输出数组中每个元素的值  
  13.    cout << "使用指针的数组值 " << endl;   
  14.    for ( int i = 0; i < 5; i++ )  
  15.    {  
  16.        cout << "*(p + " << i << ") : ";  
  17.        cout << *(p + i) << endl;  
  18.    }  
  19.    
  20.    cout << "使用 balance 作为地址的数组值 " << endl;  
  21.    for ( int i = 0; i < 5; i++ )  
  22.    {  
  23.        cout << "*(balance + " << i << ") : ";  
  24.        cout << *(balance + i) << endl;  
  25.    }  
  26.    
  27.    return 0;  
  28. }  

结果为:

注意:上例中用双浮点型指针类型声明的变量将来指向的数据类型一定是双浮点型数据。

3. C++中特殊的常量——转义字符,它有什么用呢?

首先常用转义字符对应的功能如下:

说白了,转义字符就是相当于用简洁的字符来代替某一些操作,例如:

  1. 我要向换行,我有如下格式:  
  2. 1.std::cout<<"hello world!"<<std::endl;  
  3. 2.std::cout<<"hello world!\r\n"// \r\n代表了先把输出位置移到该行的最开头,再进行换行操作,其功能与endl相同  

我编写了一个实例程序,来展示一些转义字符的作用:

  1. #include <iostream>  
  2.   
  3. #define cost 90 // C++中常用“const int cost=90”const常量来定义数据,该行代码是沿用了C语言中的宏定义结构  
  4. // const类型数据必须在声明的同时进行赋值,否则报错,而且在整个程序中不可修改const类型变量的值!  
  5. int main()  
  6. {  
  7.     std::cout << "Hello World!\n";  
  8.     short number = 9;  
  9.     std::cout << "张三买了的苹果数量是\\b=\'" << number << "\'\n";   
  10.     // /n的作用是换行,因此\r\n起到了在下一行开头再次输出的作用  
  11.     std::cout << "张三共花费了\\n=\'" << cost * number << "\'\a\r"// \r的作用是输出位置回到开头  
  12.     std::cout << "\"!\"\b";  
  13.     std::cout << "程序结尾!"// \b转义字符将输出位置右移一位  

大家会发现,其中有些转义字符为‘\c‘这种类型的,但是我如果需要’\n‘这个字符串该如何表示呢?

‘\\n‘可以解决这个问题。’\\n’的作用就是\+\n输出\之后的东西。用这种方法我们可以解决如下问题:

  1. “cout<<"我期末开始考了"50",而且我居然是前几名!"<<endl;”,大家在这句话中看出问题了吗?  
  2. "我期末开始考了"这是第一对双引号包含的内容,",而且我居然是前几名!"是第二对双引号包含的内容,还有一段不可识别的字符——50  
  3. 那我想要显示出我期末开始考了"50",而且我居然是前几名!这段字符串怎么办呢?  
  4. 我们可以用'\"'来在字符串中显示出",我们只需要把程序稍作修改即可:  
  5. cout<<"我期末开始考了\"50\",而且我居然是前几名!"<<endl;  

总结:

我们要了解由于转义字符的存在我们无法表示向‘\n‘这种字符串,系统已经默认他有了相关的功能,那我们应该怎么办呢?

\+\n即可实现在屏幕中输出\n的效果。

用此功能,我们实现了“X”X“X“输出,即实现了双引号中嵌套双引号的操作。

 

参考链接:https://www.cctry.com/thread-277142-1-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肥肥胖胖是太阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值