存在以下定义,int a=5,b=5,*c=&a,&d=b;为什么赋值语句a=b+d;正确,求详解

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/15 23:52:08

存在以下定义,int a=5,b=5,*c=&a,&d=b;为什么赋值语句a=b+d;正确,求详解
存在以下定义,int a=5,b=5,*c=&a,&d=b;为什么赋值语句a=b+d;正确,求详解

存在以下定义,int a=5,b=5,*c=&a,&d=b;为什么赋值语句a=b+d;正确,求详解
先说一下引用,
引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样.
引用的声明方法:类型标识符 &引用名=目标变量名;
【例1】:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名
说明:
(1)&在此不是求地址运算,而是起标识作用.
(2)类型标识符是指目标变量的类型.
(3)声明引用时,必须同时对其进行初始化.
(4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名.
ra=1; 等价于 a=1;
(5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元.故:对引用求地址,就是对目标变量求地址.&ra与&a相等.
这是主要也是很简单的几点,要理解透彻!
另外引用还有如下的规则:
(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化).
(2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL).
(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象).
下面我通俗的讲一下这道题,
int &d=b;其实就是给b取了个别名d,打个比方,小明的年龄是10岁,小明的小名叫小强,我说我的年龄是小明和小强年龄的和,其实就是说我的年龄是小明的年龄+小明的年龄,小强就是小明!
这里也是一样的道理,a=b+d等价于 a=b+b;b和d是同一个变量!你说a=b+b合法不合法呢?答案很显然,这是正确的!
一定要弄清楚引用的含义!因为很多地方我们都必须使用引用来直接获取参数,从而避免创造副本,难以返回参数值等情况.建议再看一看书,书上写的应该比较详细!如果觉得无法理解,建议找老师当面讲解!因为这真的是非常重要的知识点.

存在以下定义,int a=5,b=5,*c=&a,&d=b;为什么赋值语句a=b+d;正确,求详解 设有定义int a=3b=4c=5则以下表达式中,值为0的表达式是:A a&&b;B:a 设有定义int a=3,b,c=5;将以下3条语句++a;b=a+c;++c;写成一条语句 (28)若要定义一个具有5个元素的整型数组,以下错误的定义语句是( )A)int a[5]=﹛0﹜; B)int b[]={0,0,0,0,0}; C)int c[2+3]; D)int i=5,d[i];(25)以下程序段完全正确的是( )A)int *p; scanf(%d,&p); B)int *p; scanf(“%d C语言习题(结构 )单选题1.有以下定义:struct { int x;int y;} a={ 5,7},*p=&a; 则表达式 ++p->x的值为 ( ).A.5 B.6 C.7 D.82、设有以下定义,正确的叙述是( ).typedef struct S { int g; char h; } T;A.可用S定义结构 下列数组定义错误的是 A.int x=5,a[x]; B.int aa[1]; C.int aa[2][3]; D.int a['a']; 若有以下定义,则对a数组元素的正确引用是_________.int a[5],*p=a; a)*&a[5] b)a+2 c)*(p+5) d)*(a+2)若有以下定义,则对a数组元素的正确引用是_________.int a[5],*p=a;a)*&a[5] b)a+2 c)*(p+5) d)*(a+2) 设有定义:int a=5 ,b=2;以下值为1的表达式是 A b!=a B!(b==a/2) C a!=b‖a>=b D a>0&&b 以下数组定义中,合法的是( ).A.int float[] B.int 3abc[] C.int apple[] D.float *abc[5] 3、以下正确的函数定义是( ).A.double fun(int x,int y); {int z; z=x+y; return z;}3、以下正确的函数定义是( ).A.double fun(int x,int y); {int z; z=x+y; return z;}B.fun(int x,y) {int z; return z;}C.double fun( 6.以下能正确定义一维数组的选项是( ) a.int a[5]={1,2,3,4,5}; b.char a[]={0,1,2,3} c.char a={'A','B6.以下能正确定义一维数组的选项是( )a.int a[5]={1,2,3,4,5};b.char a[]={0,1,2,3}c.char a={'A','B','C'}d.int a[5]=012 若有以下定义,则正确的赋值语句是( ) int a,b; float x; A.a=1,b=2 B.b++; C.a=b=5 D.b=int (x)D.b=int (x); 以下的变量定义语句中,合法的是 :A.float $_*5= 3.4F; B.byte b1= 15678; C.int _abc_ = 3721L;以下的变量定义语句中,合法的是 :A.float $_*5= 3.4F;B.byte b1= 15678;C.int _abc_ = 3721L;D.double a =Double.MAX_VALUE; 以下能正确定义且赋初值的语句是?A.int a=b=10;以下能正确定义且赋初值的语句是?A.int a=b=10; B.char c=32; C语言题!为什么答案选D,C项错在哪?以下能正确定义数组并正确赋初值的语句是:A.int N=5,b[N][N];B.int a[1][2]={{1},{3}};C.int c[2][]={{1,2},{3.4}};D.int d[3][2]={{1,2},{34}} C语言赋值表达式问题:若定义有语句:int a=3,b=2,c=1; 以下选项若定义有语句:int a=3,b=2,c=1; 以下选项中错误表达式是()a)a=(b=4)=3;b)a=(b=4)+c;c)a=b=c+1;d)1+(b=c=4);A为什么错?谭浩强书中(a=3*5)=4*3 存在如下定义:int a=5,b=5,*c=&a,&d=b,下列赋值语句正确的是 A a=d+存在如下定义:int a=5,b=5,*c=&a,&d=b,下列赋值语句正确的是A a=d+bB a=b+cC a=*d+cD 以上都错&d=b是把b的值附给了d的地址吗? 36)有以下定义:int a; long b; double x,y;则以下选项中正确的表达式是36)有以下定义:int a; long b; double x,y;则以下选项中正确的表达式是A)a%(int)(x-y)   B)a=x!=y;   C)(a*y)%b