在c++中,int &p和int p 有什么区别
4个回答
展开全部
在C++中,函数void func(int &p,int q)中的第一个形式参数p是“int型引用”类型。引用是C++的特殊变量类型,它是已有变量的别名。主调函数调用func把实参传给p时,实际上是给实参起了个别名p,所以在函数中对p的操作就是对主调函数中的对应实参的操作,将会使实参发生永久性改变。而func中的第二个形参int q是普通的int类型,调用时只是将实参的“值”拷贝给q,所以在函数中对q的操作并不影响主调函数中的实参值。
int &p这样写,只在作为函数的形式参数时是正确的,若是在声明语句则必须初始化,只有写成int a,&p=a;才是正确的,因为如前所述引用“是已有变量的别名”,所以不可能独立存在。
题面代码在调用func时把x传给了第一个int引用形参p(称为引用传递),把y传给了第二个普通int形参q(称为值传递或拷贝传递),函数中语句p=q;把y的值赋给了p,由于p是x的别名,所以使主调函数中x的值变成了y的值2;而q=t;语句虽使函数中的q变量的值变为x原先的值1,但由于q只是y的拷贝,所以并不能影响到主调函数中y变量的值。所以正确选项是D。
展开全部
int &p为引用,而int p为定义变量。二者区别如下:
1 引用在定义的时候必须赋值,否则编译会出错。正确的形式为
int &p = a;
其中a为int型变量。
2 引用在定义时不会分配空间,只是初始化变量的一个别名。如
int &p = a;的形式,后续对p的操作,与对a操作完全等价。
1 引用在定义的时候必须赋值,否则编译会出错。正确的形式为
int &p = a;
其中a为int型变量。
2 引用在定义时不会分配空间,只是初始化变量的一个别名。如
int &p = a;的形式,后续对p的操作,与对a操作完全等价。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一个为指针形态,一个只是单纯的变量而已。
如此题所示,func宣告时p为指针,q为变量,因此main中呼叫func传入x和y时,x传递的是地址(address or reference),y只是变量,因此y的值不会因为func中的运算而改变,但是x会。
如此题所示,func宣告时p为指针,q为变量,因此main中呼叫func传入x和y时,x传递的是地址(address or reference),y只是变量,因此y的值不会因为func中的运算而改变,但是x会。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(1)给这个程序加上注释(可选) LZ的代码有粘贴错误,现简单注释如下: #include /*包含头文件*/ void main() /*主函数*/ { long int num; /*声明长整型变量,用来保存输入的数值*/ int indiv,ten,hundred,thousand,ten_thousand,place; /*声明整型的数位变量(个位,十位,百位,千位,万位)及数位个数*/ printf("请输入一个正整数(0~99999):"); /*提示输入整数*/ scanf("%ld",&num); /*输入长整数*/ if(num>9999) /*按照从大到小的顺序进行判断,如果大于9999,说明输入的是5位数*/ place=5; /*位数变量值置为5*/ else if(num>999) /*如果大于999,说明输入的是4位数*/ place=4; /*位数变量值置为4*/ else if(num>99) /*如果大于99,说明输入的是3位数*/
place=3; /*位数变量置为3*/ else if(num>9) /*如果大于9,说明输入的是2两位数*/ place=2; /*位数变量置为2*/ else place=1; /*否则置为1*/ printf("位数:%d",place); /*输出数值的位数*/ printf("每位数字为:"); /*提示每位数字的输出*/ ten_thousand=num/10000; /*整型数除10000,得到万位*/ thousand=(int)(num-ten_thousand*10000)/1000; /*输入的数值减去万位*10000,剩下的千位数,然后再除以1000,得到千位个数*/ hundred=(int)(num-ten_thousand*10000-thousand*1000)/100; /*余下类推,方法同上*/ ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10; indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10); switch(place) /*以下是根据数值位数进行判断,以输出不同位数的数值及相应个位数*/ { case 5:printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv); /*输出正常顺序数值*/ printf("反序数字为:");
place=3; /*位数变量置为3*/ else if(num>9) /*如果大于9,说明输入的是2两位数*/ place=2; /*位数变量置为2*/ else place=1; /*否则置为1*/ printf("位数:%d",place); /*输出数值的位数*/ printf("每位数字为:"); /*提示每位数字的输出*/ ten_thousand=num/10000; /*整型数除10000,得到万位*/ thousand=(int)(num-ten_thousand*10000)/1000; /*输入的数值减去万位*10000,剩下的千位数,然后再除以1000,得到千位个数*/ hundred=(int)(num-ten_thousand*10000-thousand*1000)/100; /*余下类推,方法同上*/ ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10; indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10); switch(place) /*以下是根据数值位数进行判断,以输出不同位数的数值及相应个位数*/ { case 5:printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv); /*输出正常顺序数值*/ printf("反序数字为:");
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询