c++的问题
有如下程序段
int i =0, j=1;
int &r=i ; // ①
r =j; //②
int*p=&i ; //③
*p=&r ; //④
其中会产生编译错误的语句是
A)④
B)③
C)②
D)①
大家帮我看下语句一"&r=1"应该是怎么的意思,是不是把1赋给r的地址呢。
追问:还有一道题差不多的请看看void func (int a,int&b) {a++; b++;}
若执行代码段:
int x=0 ,y=1
func(x,y);
则变量x和y值分别是
A)0和1
B)1和1
C)0和2
D)1和2
请问里面括号的"int &b"又是什么意思呢?
答案:1 2 都错,因为 r 还没有定义,没有左值(lvalue)右值(rvalue) 本来4也是错的,但我的gcc没提示,可能是因为由于前面的 r = j; 的原因
即使 r 定义了, 1 也是错的,&r 没这种写法,4 会产生一个警告
&r = 1 的意思你猜对了 :)
第4句有明显的错误,地址怎么能赋给整形变量?
&r=i,这句话的意思相当于给i取了个别名叫r,实际上r和i是完全一样的,r就是i,i就是r。就像你的大名和你的小名一样,都指的是你。
选C。因为R是引用。已经指向i了。
int &r=i ; // ① r是i的 别名 ,对R的操作和对I的操作效果是一样的
4 是 错的
第四句很明错误,“*P”在这是一个整型数个,而—“&r” 是一个地址的值。
&是指针的引用
看你们解释的乱七八糟的,搞的懂都搞不懂了
int &r=i ; // ① //声明一个int型标示为r的别名,引用目标为i。现在,对r的操作完全等于对i的操作。
r =j; //②//这里就报错了~~~。C++有了引用,但是C++的引用除了初始化时候可以制定目标,之后都不能够改动。
int*p=&i ; //③ //声明一个int指针指向i的地址,这个大家都看得懂。
*p=&r ; //④ //把r的地址赋值给p指向的那个int(也就是i),不会报错的,r的地址是一个int,i也是int。怎么会报错呢。只是现在i存的是r的引用目标(j)的地址了。很多时候这样用的,比如二维数组就可以做成一个一维数组存了一串一维数组的首地址。如:
arr[0] [1] .....
a[0] a2[0]
a[1] a2[1]
a[2] a3[2]
... ...
这里唯一注意的一点就是,只有C++才支持引用,纯C编译环境是不支持引用这个东西的。
晕答案这么多~~有几个人是对的~这里只有一个事错的,就是*p=&r ; //④
上一个:c++关键字问题?
下一个:C++语言编程题