首页 > 试题广场 >

为以下表达式选择结果是?( ) std::str

[单选题]
以下表达式选择结果是?(    )
std::string str1("trend");
std::string str2("micro");
std::string& strs = str1;
std::string* ptrs = &str1;
strs = str2;
ptrs = &str2;

  • strs = micro, * ptrs = micro
  • strs = micro, * ptrs = trend
  • strs = trend, * ptrs = micro
  • strs = trend, * ptrs = trend
声明变量strs为str1的引用,即strs是str1的别名,并不需要另外开辟内存单元来存放strs的值。strs和str1占内存中的同一个存储单元,它们具有同一地址。
注意:
(1)引用不是一种独立的数据类型,对引用只有声明,没有定义。(必须先定义一个变量,然后声明对该变量建立一个引用)
(2)声明一个引用时,必须同时使之初始化,及声明它代表哪一个变量。
(3)在声明一个引用后,不能再使之作为另一变量的引用。
      int a1 a2;
      int &b = a1;
      int &b = a2; //错误,不能把b又变成a2的引用
      b = a2;     //可以,因为b作为a1的引用,b就和a1一致,故相当于a1 = a2;
(4)不能建立引用数组,不能作为数组元素的别名
(5)不能建立引用的引用。
        int a = 3;
        int &b = a;
        int &c = b;  // 不能建立引用的引用
        int * p = b;  //不能建立指向引用的指针
(6)可以取引用的地址(如已声明b是a的引用,则&b就是变量a的地址&a)
        int *pt;
        pt = &b; // 把变量a的地址赋值给指针变量pt
(7)在声明了引用后,在使用它的时候不带&,而只引用引用的名字(如b,而不是&b)。
发表于 2017-09-13 16:32:18 回复(5)
strs = str2并不是把引用指向str2。由于strs相当于str1, 该句会调用赋值构造函数将str2赋值给str1
发表于 2019-07-10 17:36:55 回复(0)
发表于 2017-09-06 19:32:43 回复(6)

1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来

的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:

int a=1;int *p=&a;

int a=1;int &b=a;

上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。

而下面2句定义了一个整形变量a和这个整形a的引用b,事实上a和b是同一个东西,在内存占有同一个存储单

元。

(2)引用不可以为空,当被创建的时候,必须初始化,而指针可以是空值,可以在任何时候被初始化。

发表于 2020-09-24 21:58:07 回复(0)
把string 看做int,就好理解了。不要想太多
发表于 2017-09-07 23:17:27 回复(0)
strs和str1是一个变量,只不过strs是str1的别名
发表于 2021-03-21 23:39:18 回复(0)
std::string str1("trend");
std::string str2("micro");
std::string& strs = str1;
std::string* ptrs = &str1;
std::string& strs = str2; //这样就错了;引用初始化以后不能改变指向,原题那样相当于把str2的值赋给str1
ptrs = &str2;

发表于 2018-05-07 18:44:58 回复(2)
我可以说我是蒙的吗?
发表于 2017-10-23 20:30:58 回复(2)
首先&strs = str1;strs是str1的别名,ptrs是一个指针指向str1的地址,然后strs = str2,相当于str1 = str2,这时str1、str2和strs都是micro,ptrs = &str2 ptrs重新指向str2的地址。
发表于 2023-02-28 09:06:30 回复(0)
声明变量strs为str1的引用,即strs是str1的别名,并不需要另外开辟内存单元来存放strs的值。strs和str1占内存中的同一个存储单元,它们具有同一地址。 注意: (1)引用不是一种独立的数据类型,对引用只有声明,没有定义。(必须先定义一个变量,然后声明对该变量建立一个引用) (3)在声明一个引用后,不能再使之作为另一变量的引用 这点有点迷惑       int a1 a2;       int &b = a1;       int &b = a2; //错误,不能把b又变成a2的引用       b = a2;     //可以,因为b作为作为a1的引用,b就和a1一致,故相当于a1 = a2; (4)不能建立引用数组 (6)可以取引用的地址(如已声明b是a的引用,则&b就是变量a的地址&a)         int *pt;         pt = &b; // 把变量a的地址赋值给指针变量pt (7)在声明了引用后,在使用它的时候不带&,而只引用引用的名字(如b,而不是&b) 总结一下大佬的:引用不是独立数据类型;声明引用同时要初始化;引用不可更换;不能建立引用数组;不能建立引用的引用;可以使用引用的地址;直接使用引用的名字即可。
发表于 2021-10-19 21:59:29 回复(0)
引用和指针
发表于 2019-02-20 23:09:22 回复(0)