当前位置:首页 » 编程语言 » c语言c引用
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言c引用

发布时间: 2022-07-03 12:13:16

c语言数组的引用

int x[10]里面有十个元素为x[0]道x[9]
首先,指针是特殊的变量,比如int *p;如果不加*号,你可以把p当作一个普通变量,而这个变量中存放的东西是一个内存地址.如果你只想得到这个地址,直接用p,但是如果你想得到这个地址中存的数据内容,就要加一个运算符*

⑵ C语言中引用指的是什么,举个例子

C语言里面没有引用的说法,只有C++里面有。C++里引用就是给变量定义一个别名,操作这个别名就是操作原变量。

比如,我们定义一个引用:

inta=10;//定义一个普通变量
int&ref=a;//定义一个变量a的引用
ref=20;//这里对ref进行操作其实就是对a进行操作

变量主要是在参数传递的时候非常有用,当你的函数参数是一个值参数的时候,我们一般的做法是传递一个指针进去,这样就导致我们在函数里操作的都是指针,这样其实很不方便,如果使用引用的话就可以非常方便。

比如定义一个参数是引用的函数

voidfunc(int&b)
{
b++;
}
//调用
inta=100;
func(a);//调用的时候直接传递参数进去

上面的方式可以实现和指针一样的效果,但是更加方便

⑶ c语言中有引用这个概念吗

C 语言没有 引用的概念,

C++有
vb,c#, java也都有
指针比引用更 直接,更容易操作内存, 但是也不安全。
所以c,c++ 可以方便实现更强大的底层 API的功能。
指针的使用 意味着有可能内存出错,如果操作不规范有可能程序崩溃 甚至系统崩溃。
.net Frame 框架不用指针概念,而用 引用, 规避了内存操作,而是用引用的概念保护好,
引用一般只用在参数地址的传递上,表示传址,其他地方很少用。

⑷ 请问c语言中引用怎样理解

1、引用的理解

引用是引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。

例如: Point pt1(10,10);

Point &pt2=pt1; 定义了pt2为pt1的引用。通过这样的定义,pt1和pt2表示同一对象。

需要特别强调的是引用并不产生对象的副本,仅仅是对象的同义词。因此,当下面的语句执行后:

pt1.offset(2,2);

pt1和pt2都具有(12,12)的值。

引用必须在定义时马上被初始化,因为它必须是某个东西的同义词。你不能先定义一个引用后才

初始化它。例如下面语句是非法的:

Point &pt3;

pt3=pt1;

2、引用的两个主要用途

作为函数参数以及从函数中返回左值。

(1)引用参数

a、传递可变参数

传统的c中,函数在调用时参数是通过值来传递的,这就是说函数的参数不具备返回值的能力。所以在传统的c中,如果需要函数的参数具有返回值的能力,往往是通过指针来实现的。比如,实现两整数变量值交换的c程序如下:

void swapint(int *a,int *b)

{

int temp;

temp=*a;

a=*b;

*b=temp;

}

使用引用机制后,以上程序的c++版本为:

void swapint(int &a,int &b)

{

int temp;

temp=a;

a=b;

b=temp;

}

调用该函数的c++方法为:swapint(x,y); c++自动把x,y的地址作为参数传递给swapint函数。

b、给函数传递大型对象

当大型对象被传递给函数时,使用引用参数可使参数传递效率得到提高,因为引用并不产生对象的副本,也就是参数传递时,对象无须复制。下面的例子定义了一个有限整数集合的类:

const maxCard=100;

Class Set

{

int elems[maxCard]; // 集和中的元素,maxCard 表示集合中元素个数的最大值。

int card; // 集合中元素的个数。

public:

Set () {card=0;} //构造函数

friend Set operator * (Set ,Set ) ; //重载运算符号*,用于计算集合的交集 用对象作为传值参数

// friend Set operator * (Set & ,Set & ) 重载运算符号*,用于计算集合的交集 用对象的引用作为传值参数

...

}

先考虑集合交集的实现

Set operator *( Set Set1,Set Set2)

{

Set res;

for(int i=0;i<Set1.card;++i)

for(int j=0;j>Set2.card;++j)

if(Set1.elems[i]==Set2.elems[j])

{

res.elems[res.card++]=Set1.elems[i];

break;

}

return res;

}

由于重载运算符不能对指针单独操作,我们必须把运算数声明为 Set 类型而不是 Set * 。每次使用*做交集运算时,整个集合都被复制,这样效率很低。我们可以用引用来避免这种情况。

Set operator *( Set &Set1,Set &Set2)

{ Set res;

for(int i=0;i<Set1.card;++i)

for(int j=0;j>Set2.card;++j)

if(Set1.elems[i]==Set2.elems[j])

{

res.elems[res.card++]=Set1.elems[i];

break;

}

return res;

}

2、引用返回值

如果一个函数返回了引用,那么该函数的调用也可以被赋值。这里有一函数,它拥有两个引用参数并返回一个双精度数的引用:

double &max(double &d1,double &d2)

{

return d1>d2?d1:d2;

}

由于max()函数返回一个对双精度数的引用,那么我们就可以用max() 来对其中较大的双精度数加1:

max(x,y)+=1.0;

(4)c语言c引用扩展阅读

使用c语言中引用的原因

程序按功能划分可分为数值运算、符号处理和I/O操作三类,符号处理程序占相当大的比例,符号处理程序无处不在,编译器、浏览器、Office套件等程序的主要功能都是符号处理。

在程序中通过对函数的调用来执行函数体,其过程与其它语言的子程序调用相似。

C语言中,函数调用的一般形式为:

函数名(实际参数表)

对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数、变量或其它构造类型数据及表达式。各实参之间用逗号分隔。字符函数引用即对引用有关库函数或自定义函数函数。

⑸ c语言中关于引用的问题请教。

引用可以理解为变量的别名
引用类型的形参等效于实参,对引用类型的形参做的所有操作都会反应到实参上去
形参e不再是指针,其类型就是ElemType,等效于实参的e

另外,引用类型是C++的,C语言里没有引用类型,都是通过指针指向实参的地址来变相实现的

⑹ C语言中引用及指针和引用的联系与区别

C语言中引用和指针的用法很相似,在做函数参数时都是传递变量的地址,而不是传递一个变量的副本,都可以返回对参数变量的修改。主要区别在于参数的传递形式上。
指针的形式类似于 : int *pInt;
引用的形式类似于 : int &pInt;

⑺ 请问c语言中引用怎样理解

引用的理解如下: 引用能起到指针的部分作用,比指针安全。引用可以看作是某个变量的一个别名。对引用进行操作就像对原变量进行操作一样。主要用于函数的参数传递时使用。需要改动参数,直接传递一个变量过去即可。在操作符重载中有更重要的意义。

⑻ C语言中怎么引用无参函数

main函数必须定义为int;
函数在main后,必须先声明再使用;
#include<stdio.h>
int main()
{
void hello();
hello();
}
void hello()
{
printf("Welcome to C!");
}

⑼ c语言问题,什么叫引用啊

引用(reference)是c++对c语言的重要扩充。
一、引用的概念
引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。
例如: Point pt1(10,10);
Point &pt2=pt1; 定义了pt2为pt1的引用。通过这样的定义,pt1和pt2表示同一对象。
需要特别强调的是引用并不产生对象的副本,仅仅是对象的同义词。因此,当下面的语句执行后:
pt1.offset(2,2);
pt1和pt2都具有(12,12)的值。
引用必须在定义时马上被初始化,因为它必须是某个东西的同义词。你不能先定义一个引用后才
初始化它。例如下面语句是非法的:
Point &pt3;
pt3=pt1;
那么既然引用只是某个东西的同义词,它有什么用途呢?
下面讨论引用的两个主要用途:作为函数参数以及从函数中返回左值。
二、引用参数
1、传递可变参数
传统的c中,函数在调用时参数是通过值来传递的,这就是说函数的参数不具备返回值的能力。
所以在传统的c中,如果需要函数的参数具有返回值的能力,往往是通过指针来实现的。比如,实现
两整数变量值交换的c程序如下:
void swapint(int *a,int *b)
{
int temp;
temp=*a;
a=*b;
*b=temp;
}
使用引用机制后,以上程序的c++版本为:
void swapint(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
调用该函数的c++方法为:swapint(x,y); c++自动把x,y的地址作为参数传递给swapint函数。
2、给函数传递大型对象
当大型对象被传递给函数时,使用引用参数可使参数传递效率得到提高,因为引用并不产生对象的
副本,也就是参数传递时,对象无须复制。下面的例子定义了一个有限整数集合的类:
const maxCard=100;
Class Set
{
int elems[maxCard]; // 集和中的元素,maxCard 表示集合中元素个数的最大值。
int card; // 集合中元素的个数。
public:
Set () {card=0;} //构造函数
friend Set operator * (Set ,Set ) ; //重载运算符号*,用于计算集合的交集 用对象作为传值参数
// friend Set operator * (Set & ,Set & ) 重载运算符号*,用于计算集合的交集 用对象的引用作为传值参数
...
}
先考虑集合交集的实现
Set operator *( Set Set1,Set Set2)
{
Set res;
for(int i=0;i<Set1.card;++i)
for(int j=0;j>Set2.card;++j)
if(Set1.elems==Set2.elems[j])
{
res.elems[res.card++]=Set1.elems;
break;
}
return res;
}
由于重载运算符不能对指针单独操作,我们必须把运算数声明为 Set 类型而不是 Set * 。
每次使用*做交集运算时,整个集合都被复制,这样效率很低。我们可以用引用来避免这种情况。
Set operator *( Set &Set1,Set &Set2)
{ Set res;
for(int i=0;i<Set1.card;++i)
for(int j=0;j>Set2.card;++j)
if(Set1.elems==Set2.elems[j])
{
res.elems[res.card++]=Set1.elems;
break;
}
return res;
}
三、引用返回值
如果一个函数返回了引用,那么该函数的调用也可以被赋值。这里有一函数,它拥有两个引用参数并返回一个双精度数的引用:
double &max(double &d1,double &d2)
{
return d1>d2?d1:d2;
}
由于max()函数返回一个对双精度数的引用,那么我们就可以用max() 来对其中较大的双精度数加1:

⑽ 为什么C语言中可以用引用 啊

这个不是C++编译器的问题。其实你的 InitStack 这个函数,它定义时的形参是 SqStack 的指针类型,而你在这里调用InitStack这个函数,传递的实参是SqStack的指针值。