int &x; 可以吗? & 和* 具体讲解
“&”是引用运算符 ,用来说明一个引用。其格式是:
数据类型 &引用名=已定义的变量名
例:
int a=10;
int &i=a;
i=i+100;
这时,i的值为 110。
int &x和int y是有区别的,区别如下:
int &x一般只用于函数的参数中, 而int y不止用在函数参数中。
int &x做参数时,传递变量是该实参的引用类型,函数执行过程中可以改变实参的值,而int y传递的是实参的拷贝,函数执行后不改变实参的值。
在程序参数类型选择时需要根据具体的需要选择合适的类型进行声明。
在c++中引用有两种, 我们常称一个用'&'修饰的变量为引用, 引用分常量引用和非常量引用两种, 其中常量引用指的是以const作为修饰符(但其实并未用'&'修饰)的变量(如const int x), 而此处所定义的int& x即为非常量引用. 这是当'&'在声明变量时的用法,所以int &x;是可以的. 而类似的我们使用*来定义变量时也有int *p,亦即定义一个指向int型的指针p的用法.
'&'运算符和'*'运算符除了可以在声明变量时使用外, 也可以在一般语句中使用, 我们常用'&'来表示取某一变量的地址, '*'来表示取某个地址中的值;
另外,我们也可以将'&'和'*'用于函数的声明以及定义中去. 应该知道, 一个函数头主要包含了返回值,函数名和参数三个部分. 所以, 当*位于不同位置时也会有不同含义, 诸如int * func() 和 (int *)func()和int (* func)(), int func(int *a),他们的区别为:
int * func() : func是一个函数,返回值是int *类型.
(int *)func(): 一般来说是将func的返回值强制转换为int *, 实际效果与1无太大差别.
int (* func)(): func是一个函数指针,它指向一个没有形式参数的函数,这函数返回一个int值.
int func(int *a): 我们常用a表示数组的首地址, 亦即int func(int a[]).
而'&'用于函数头时,最多的用处就是用于修饰形参表示引用, 这样就可以在子函数中修改原本不能修改的形参的值了.
本质:引用是别名,指针是地址,具体的:①从现象上看,指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。这句话可以理解为:指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变,但是指定的对象其内容可以改变。出处:网页链接
引用链接的这一段, 一是因为他讲的很好(我不想打字了[delete]), 而且, 这里也涉及到了int &x的赋值问题, 因为有时我们书写int &x = 10;时会发现报错: 非常量引用的初始值必须为左值, 而
int k = 10;int &x = k;却可以. 我认为这段话中"引用则总是指向在初始化时被指定的对象"很好的解释了原因, 亦即k是一个开辟了空间的对象, 而10只是一个常数, 他们的存储位置是不同的(这里感兴趣的话可以去搜资料查找c++的四个存储位置).
ps: 手打不易,求采纳,翻滚翻滚~
随便举个例子
int pop(sqSTack &st,int &x;)
这是一个形参,sqSTack &st表示传递st这个栈的地址。也就是说,当你在这个形参里改变这个栈的内容,无论你这个形参是否返回(是否是void),主函数中的st也随之改变。
int &x也是一样,传递的是x的地址,在形参中改变x的值,主函数中的x值也改变。
而int x只是传递了x此时的值。
把地址比做地皮,上面的内容比做房子。
int x就是把这个房子的平面图给你,你可以改,但是那个房子没有变。
int &x就是把这块地给你,你把房子重新装修,这个房子就真正地变了。后面你再把这个房子的平面图给别人,给的是装修后的平面图。
不知道这么说你能不能听懂。
*就是定义一个指针变量,指针变量相当于地标,标出地皮位置。比如int*p=a[i],翻译过来是让int型指针p指向a[i]的地址。理解成把p这个地标放在a[i]的地皮上,并且p是变量,可以移动。
&是引用,*是指针变量
长兴标银丹: &代表取x地址,*代表指针运算,*&x和x在引用时是等价的.*和&是互逆运算. int是定义变量类型的,&x的地址做为变量,这样使用是错误的 int *x,是可以的 例如:printf("%d",*&x);//是可以的,
新和县17755708645: int &x,和int y有什么区别不 - ?
长兴标银丹: int &x和int y是有区别的,区别如下: 1. int &x一般只用于函数的参数中, 而int y不止用在函数参数中. 2. int &x做参数时,传递变量是该实参的引用类型,函数执行过程中可以改变实参的值,而int y传递的是实参的拷贝,函数执行后不改变实参的值. 在程序参数类型选择时需要根据具体的需要选择合适的类型进行声明.
新和县17755708645: int& 是什么意思,怎么使用,最好能给个例子,谢谢! - ?
长兴标银丹: int& 实际上 两个类型的组合,就是“ 整型 + 引用 ” 的组合类型,引用的意思就相当于给一个变量起了个别名,你操作这个别名,也就操作了他本身
新和县17755708645: c语言 &与*的具体区别 - ?
长兴标银丹: 在定义变量时 *是定义指针,&是引用int *pVar=NULL;//定义一个int类型指针int Var=0; int &pVar=Var;//定义一个引用,并且定义时要指定所引用的对象在使用时 *是解指针(即取其指向的变量的值) ,&是取地址 int Var=10; int *pVar=NULL; pVar=&Var;//取Var的地址 printf("%d",*pVar);//取值
新和县17755708645: int i=*(int *)&x; 这句话在c语言里面是什么意思? - ?
长兴标银丹: int i=*(int *)&x;相当于int i=x;功能是把x的值赋给i *(int *)&x,其中&x是对变量x的地址,(int *)把它转化成int型指针,最前面再加上一个*进行解引用,结果就是变量x的值.
新和县17755708645: 有关运算符 p=&x,*p=&x有什么区别 - ?
长兴标银丹: 我简单解释一下 如果p是一个int类型的指针,x是int类型,p=&x就是p指向x所在的内存地址 如果p是一个int指针类型的指针,x是int类型,*p=&x就是让指向的int类型的指针指向x所在的内存地址,前提是,你已经为p开辟了空间,不然p指向的内存不安全. 如果*p=&x这句话处于一个定义的位置 例如 int *p=&x,那么就相当于定义了一个int类型的指针p,指向x所在的内存地址. 这个时候,*不是取值的意思,而是定义指针的符号. 建议题主好好去看一下C语言的课本,只要搞清楚指针是什么,取值是什么,取地址是什么,这些问题就完全不是问题.
新和县17755708645: int x,*p=&x则&*x和*&p分别表示什么 - ?
长兴标银丹: &*x 和 *&p 都是错误的表达.因为 int x; 没有 *x 形式,只有求地址 &x 形式.因为 int *p; 没有 &p 形式,只有求指向的值 *p 形式.可以 有 &*p, 可以 有 *&x. &*p 就是 p, *&x 就是 x.例如:int x=8; int *p=&x; printf("%d %p %p\n",*&x,&*p, &x); 等同 printf("%d %p %p\n",x,p, &x);
新和县17755708645: C语言函数传参时是不是不能在形参列表里不能有&符号? - ?
长兴标银丹: int fun(int &x)是C++上的常用形式,表示参数是一个引用;C上传址的话是 int fun(int * x),表示传入的是一个指针变量,可以通过指针修改所指向的内容.具体那本数据结构书上究竟怎么讲的希望贴出来个例子看一看.
新和县17755708645: 在C++中,int &function()和int *function()的用法是什么,能不能举个例子? - ?
长兴标银丹: #include using namespace std; int x; int * foo() { return &x; } int & goo() { return x; } int main() { int *p = foo(); int &r = goo(); *p = 1; coutr = 2; cout }
新和县17755708645: int *const &x与int *&x的区别是什么 - ?
长兴标银丹: int *const &x中的const不能没有!实际上这里可以去掉&来讨论,如果去掉&来理解,是不是明了些?这是x的引用的类型是int*,而*后的const是用来限制变量的指向不可变,如果有,那么x指向的地址不可变,如果没有,可以改变x:int i = 0, j = 1; int *const &x = &i; int * &p = &i; x = &j; //error,x的指向不可变*x = 2; //OK p = &j; //OK