C语言中引用指的是什么,举个例子
发布网友
发布时间:2022-04-25 14:46
我来回答
共2个回答
懂视网
时间:2022-04-27 22:05
引用类型也称别名,它是个很有趣的东西。在c++ 下你可以把它看作是另外的一种指针,通过引用类型我们同样也可以间接的操作对象,引用类型主要是用在函数的形式参数上,通常我们使用它是把类对象传递给一个函数。
引用对象采用类型名加上&符号和名称的方式进行定义。例如:(int &test;),这里我们就定义了一个int类型的名为test 的引用,但是int &test;这样的方式是不能够被编译成功的,因为引用的定义必须同时给应用进行赋值操作,这里的赋值并不是说把变量的值传递给引用,而是把引用指向变量,写成这样就对了:(int &test=变量名;)。
#include <iostream>
using namespace std;
void main(void)
{
int a=10;
int &test=a;
test=test+2;
cout << &a << "|" << &test << "|" << a << "|" <<test << endl;
cin.get();
}
观察并编译运行上面的代码你会发现&a和&test的地址显示是相同的,a和test的值显示也是一样的!
结合前一个教程的内容我们来说一下const引用的相关内容,这里要特别注意,和前一个教程一样带const修饰的引用同样也容易混淆概念!
const修饰如果用在引用上会有一个特别之处,它的奥妙就在于可以进行不同类型的对象的初始化,而这一切在普通变量操作上是不可能的下面我们来看一个例子:
#include <iostream>
using namespace std;
void main(void)
{
int a=10;
//double &test = a + 1.2f; //这句就是错误的!
const double &test = a + 1.2f;
cout << &a << "|" << &test << "|" << a << "|" <<test << endl;
cin.get();
}
上面的代码足够说明问题了,这就是const修饰带来的好处,但是聪明的人会在输出的时候发现一个问题,就是a和test的值的输出不同,按照最先说的道理应该可以改变a的值呀,为什么在这里却有没有能够改变呢?
道理是这样的,const修饰过后的引用在编译器内部是这样进行变化的。
int a=10;
const double &test = a + 1.2f;
这样的一段代码在编译器认为却是下面的方式进行的
int a=10;
int temp = a;
const double &test = temp + 12.f
这里其实是把a的值赋给了一个临时temp 变量,而后test获得的却是temp+12.f 改变的是temp而不是a,所以就出现了a和test显示的值不同的情况,这里要特别注意,这是一个很容易混淆的地方,在编写程序的时候要特别仔细,以免出现了问题却检查不出为什么
热心网友
时间:2022-04-27 19:13
C语言里面没有引用的说法,只有C++里面有。C++里引用就是给变量定义一个别名,操作这个别名就是操作原变量。
比如,我们定义一个引用:
int a=10; //定义一个普通变量
int &ref=a; //定义一个变量a的引用
ref=20; //这里对ref进行操作其实就是对a进行操作
变量主要是在参数传递的时候非常有用,当你的函数参数是一个值参数的时候,我们一般的做法是传递一个指针进去,这样就导致我们在函数里操作的都是指针,这样其实很不方便,如果使用引用的话就可以非常方便。
比如定义一个参数是引用的函数
void func(int &b)
{
b++;
}
//调用
int a=100;
func(a); //调用的时候直接传递参数进去
上面的方式可以实现和指针一样的效果,但是更加方便
C语言中引用指的是什么,举个例子
C语言里面没有引用的说法,只有C++里面有。C++里引用就是给变量定义一个别名,操作这个别名就是操作原变量。比如,我们定义一个引用:int a=10; //定义一个普通变量int &ref=a; //定义一个变量a的引用ref=20; //这里对ref进行操作其实就是对a进行操作变量主要是在参数传递的时候非常有...
请问C语言中的"."、"*"、"->"、"&"都有什么作用和区别?
你好!!!1.‘.’是使用对象的成员(数据成员或是函数承成员.)举个例子:struct A//结构体 { int x;int y;};A a,定义一个结构体变量a,那么此时要想使用变量x,那么那就可以用:a.x,就可以使用x的值了。要是定义结构体指针变量即:A *a,那么要是使用使用变量x,就得:a->x,就可以使用...
在C语言中,“::”是什么?
->是一个整体,它是用于指向结构体、C++中的class等含有子数据的指针用来取子数据。换种说法,如果我们在C语言中定义了一个结构体,然后申明一个指针指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到“->”.举个例子:struct Data { int a,b,c;}; /*定义结构体*/ struct Data...
c语言中 ->这个符号什么意思?例如,p->n 什么意思?
在c语言中,->是与指针配对使用的,而这个指针通常指向的是一个数据结构,再通过->符号来获取 该数据结构中的成员数据。举个例子:struct test { // 先声明一个数据结构 int n;int m;};struct test t; // 定义一个该结构的变量 struct test *p; // 定义一个该结构的指针 p = &t; // ...
请问大家,在c语言中,调用函数和被调用函数分别是什么啊?
这两个定义是相对的。。。比如说你自己定义编写了一个函数,然后在后面的编写语句中要用到你之前编写的函数。。你引用了。。那个函数就是被调用函数。。你正在写的那个主函数就是调用函数。。...void try(int x,int y,int z){ ...} main(){ int x,y,z ...try(x,y,z)...} 函数try...
C语言和C++中的::和->是什么意思?
->是箭头操作符,设计它的目的是为了简化输入,以及增强程序的可读性的 ->的功能相当于解引用操作符*和成员调用操作符.的组合体 例如:class C { static int a;} 访问a就可以使用C::a来访问,表明这个变量a具有类C的作用域。它在该类内可见。了解更多,那么namespace就是个很好的例子。另外。cla...
C语言中二维数组的引用和地址有什么区别吗?比如a[i]地...
要引用数组中各个元素。a[i]是数组专用的方法,它本身就是指a往后偏移i个长度内存空间里存放的内容,因此用&取地址就变成了该内容对应的地址;也可以用*(a+i),a+i指从地址a偏移i个长度(此长度不是字节,取决于数组存储的元素类型)的地址(注意此时它不是指里面的内容),因此加上*以取到里面的内容。也就是说a...
在c语言中,“->”是什么意思?也是指针的意思?可不可以举个例子说明一...
(->)用来表示指向对象的指针的成员,表示数据成员 (·)用来表示一般对象的成员,表示成员函数。例如:(1)Pdate->year, Pdate->month, Pdate->day;或者 (*Pdate).year, (*Pdate).month, (*Pdate).day;(2)Pdate->SetDate(int y, int m, int d);或者 (*Pdate).SetDate(int y, ...
C语言指针问题:用指向指针的指针方法对n个整数排序并输出。要求将排序单...
首先,要说明的是:数组名,是一个指针,它指向存放数组元素的一块内存区域,那么数组元素是怎么被引用的呢,我举个例子。如a[3],编译系统会首先找到这个数组的首地址,即a,然后根据〔〕中的值确定地址偏移量,即3,由此便确定了,要引用的元素是地址a+3所指向的单元的内容。你知道〔〕叫什么吗?
C语言中取内容运算
p = c;左右就都是int *;--- 如果你已经能区分类型了,那么认识指针的本质也就不难了。指针其实就是一个整数,记录了另一个变量在内存中的位置。他本身也是一个变量,所也也能赋值。为了引用他指向的变量,我们在外边加一个*标记。为了获得一个变量本身的地址,我们在外边加&标记。如果什么标记都...