c 什么是引用,C中引用的具体理解

1,C中引用的具体理解引用引入了对象的一个同义词 。定义引用的表示方法与定义指针相似,只是用&代替了* 。引用(reference)是c++对c语言的重要扩充 。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样 。引用的声明方法:类型标识符 &引用名=目标变量名;说白了就是给一个变量又起了一个名字而已
2,C语言中引用指的是什么举个例子C语言里面没有引用的说法,只有C++里面有 。C++里引用就是给变量定义一个别名,操作这个别名就是操作原变量 。比如 , 我们定义一个引用:int a=10; //定义一个普通变量int &ref=a; //定义一个变量a的引用ref=20; //这里对ref进行操作其实就是对a进行操作变量主要是在参数传递的时候非常有用,当你的函数参数是一个值参数的时候 , 我们一般的做法是传递一个指针进去,这样就导致我们在函数里操作的都是指针,这样其实很不方便,如果使用引用的话就可以非常方便 。比如定义一个参数是引用的函数void func(int &b) b++;}//调用int a=100;func(a); //调用的时候直接传递参数进去上面的方式可以实现和指针一样的效果,但是更加方便
3,c语言问题什么叫引用啊C语言没有引用啊,C++才有.引用能起到指针的部分作用,但是比指针安全.一个引用可以看作是某个变量的一个"别名" 。对引用进行操作就像对原变量进行操作一样 。主要用于函数的参数传递时使用 。因为C语言没有类似VB的“传引用调用”这个功能 , 所以C++的引用填补了这个空白 。从此即使需要改动参数,也直接传递一个变量过去即可 。这在操作符重载中有更重要的意义 。等你学到以后才会明白 。int a;//声明变量aint& ra = a; //声明一个引用,名字是ra,ra引用了a注意,ra声明的时候必须同时给出它到底引用了谁int& ra; //只声明不指明是不对的 。还有 , 引用一旦声明 , 就不能再修改到其他变量上了,这与指针不同 。ra = b; //这是不行的,因为已经int &ra = a了你们能不能能给楼主一个自己的看发?引用 , 是C++的内容 , 他是在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;iSet2.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;iSet2.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:引用简介引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样 。引用的声明方法:类型标识符 &引用名=目标变量名;【例1】:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名说明: ?。?)&在此不是求地址运算,而是起标识作用 。?。?)类型标识符是指目标变量的类型 。?。?)声明引用时,必须同时对其进行初始化 。?。?)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名 。ra=1; 等价于 a=1;?。?)声明一个引用,不是新定义了一个变量 , 它只表示该引用名是目标变量名的一个别名 , 它本身不是一种数据类型 , 因此引用本身不占存储单元 , 系统也不给引用分配存储单元 。故:对引用求地址,就是对目标变量求地址 。&ra与&a相等 。?。? ) 不能建立数组的引用 。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名. ?。?)不能建立引用的引用,不能建立指向引用的指针 。因为引用不是一种数据类型,所以没有引用的引用,没有引用的指针 。例如:int n;int &&r=n;//错误,编译系统把"int &"看成一体,把"&r"看成一体,即建立了引用的引用,引用的对象应当是某种数据类型的变量int &*p=n;//错误,编译系统把"int &"看成一体,把" *p "看成一体,即建立了指向引用的指针,指针只能指向某种数据类型的变量 ?。?)值得一提的是,可以建立指针的引用例如:int *p;int *&q=p;//正确,编译系统把" int * "看成一体,把"&q"看成一体,即建立指针p的引用,亦即给指针p起别名q 。注意:学会这种分析方法,把什么看成一体,又把什么看成一体【c 什么是引用,C中引用的具体理解】
4,C中的引用一词该如何理解啊【导读】介绍C++引用的基本概念 , 通过详细的应用分析与说明,对引用进行全面、透彻地阐述 引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效 。【引用简介】引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样 。引用的声明方法:类型标识符 &引用名=目标变量名;【例1】:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名说明:(1)&在此不是求地址运算,而是起标识作用 。(2)类型标识符是指目标变量的类型 。(3)声明引用时,必须同时对其进行初始化 。(4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名 。ra=1; 等价于 a=1;(5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元 。故:对引用求地址,就是对目标变量求地址 。&ra与&a相等 。(6 ) 不能建立数组的引用 。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名.(7)不能建立引用的引用,不能建立指向引用的指针 。因为引用不是一种数据类型,所以没有引用的引用,没有引用的指针 。例如:int n;int &&r=n;//错误,编译系统把"int &"看成一体,把"&r"看成一体 , 即建立了引用的引用 , 引用的对象应当是某种数据类型的变量int &*p=n;//错误 , 编译系统把"int &"看成一体,把" *p "看成一体 , 即建立了指向引用的指针 , 指针只能指向某种数据类型的变量(8)值得一提的是,可以建立指针的引用例如:int *p;int *&q=p;//正确,编译系统把" int * "看成一体,把"&q"看成一体,即建立指针p的引用,亦即给指针p起别名q 。注意:学会这种分析方法,把什么看成一体,又把什么看成一体引用格式:一般在文章的注解中提到或在文中直接写出,也可以加引号(20字以下不用)引用(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 Setint elems[maxCard]; // 集和中的元素,maxCard 表示集合中元素个数的最大值简单点说吧,就是对一个变量(A)起的一个别名(B),之后对B的操作就是完全对A的操作 。比如对B赋值为3,则A的值就变成3了 。myClass A;myClass &B = A;B就是A的引用,这时候实际上只有一个对象,就是A 。对B的任何操作最终都会反映在A上 。可以这么说,B实际就是A的马甲,引用就是马甲 。引用(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 Setint elems[maxCard]; // 集和中的元素,maxCard 表示集合中元素个数的最大值 。int card; // 集合中元素的个数 。public:Set ()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)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:max(x,y)+=1.0;四、常引用常引用声明方式:const 类型标识符 &引用名=目标变量名;用这种方式声明的引用,不能通过引用对目标变量的值进行修改,从而使引用的目标成为const,达到了引用的安全性 。【例】:int a ;const int &ra=a;ra=1; //错误a=1; //正确这不光是让代码更健壮,也有些其它方面的需要 。【例】:假设有如下函数声明:string foo( );void bar(string & s);那么下面的表达式将是非法的:bar(foo( ));bar("hello world");原因在于foo( )和"hello world"串都会产生一个临时对象,而在C++中 , 这些临时对象都是const类型的 。因此上面的表达式就是试图将一个const类型的对象转换为非const类型 , 这是非法的 。引用型参数应该在能被定义为const的情况下,尽量定义为const。五、引用和多态引用是除指针外另一个可以产生多态效果的手段 。这意味着,一个基类的引用可以指向它的派生类实例 。【例】:class A;class B:public AB b;A &Ref = b; // 用派生类对象初始化基类对象的引用Ref 只能用来访问派生类对象中从基类继承下来的成员,是基类引用指向派生类 。如果A类中定义有虚函数,并且在B类中重写了这个虚函数,就可以通过Ref产生多态效果 。5,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 Setint elems[maxCard]; // 集和中的元素,maxCard 表示集合中元素个数的最大值 。int card; // 集合中元素的个数 。public:Set ()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)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语言指针的基础上优化得来的,说到引用就不得不说到C中指针的缺点,因为指针可以指向任意的内存单元包括系统所在的内存,如果指针恰好指在系统的内存位置,那么一旦你给该指针赋值了那么系统就会面临崩溃,所以用指针要很小心,很多程序方面的专家建议取消指针 , 但指针的优点确实是很可观的,因此为了解决这个问题 , 引用就诞生了,引用就等于给变量起了另一个名字,这样你在用引用名的时候就等于在使用该变量本身,引用实际上也是地址传递,因为引用名和变量用的是同一个内存 。不知道这样说楼主能否理解!引用简介引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样 。引用的声明方法:类型标识符 &引用名=目标变量名;【例1】:int a; int &ra=a; //定义引用ra,它是变量a的引用 , 即别名说明: ?。?)&在此不是求地址运算,而是起标识作用 。?。?)类型标识符是指目标变量的类型 。?。?)声明引用时,必须同时对其进行初始化 。?。?)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名 。ra=1; 等价于 a=1;?。?)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元 。故:对引用求地址,就是对目标变量求地址 。&ra与&a相等 。?。? ) 不能建立数组的引用 。因为数组是一个由若干个元素所组成的集合 , 所以无法建立一个数组的别名. ?。?)不能建立引用的引用 , 不能建立指向引用的指针 。因为引用不是一种数据类型,所以没有引用的引用,没有引用的指针 。例如:int n;int &&r=n;//错误 , 编译系统把"int &"看成一体,把"&r"看成一体,即建立了引用的引用 , 引用的对象应当是某种数据类型的变量int &*p=n;//错误,编译系统把"int &"看成一体 , 把" *p "看成一体,即建立了指向引用的指针,指针只能指向某种数据类型的变量 ?。?)值得一提的是,可以建立指针的引用例如:int *p;int *&q=p;//正确,编译系统把" int * "看成一体,把"&q"看成一体,即建立指针p的引用,亦即给指针p起别名q 。注意:学会这种分析方法,把什么看成一体,又把什么看成一体C语言没有引用啊,C++才有.引用能起到指针的部分作用,但是比指针安全.一个引用可以看作是某个变量的一个"别名" 。对引用进行操作就像对原变量进行操作一样 。主要用于函数的参数传递时使用 。因为C语言没有类似VB的“传引用调用”这个功能,所以C++的引用填补了这个空白 。从此即使需要改动参数,也直接传递一个变量过去即可 。这在操作符重载中有更重要的意义 。等你学到以后才会明白 。int a;//声明变量aint& ra = a; //声明一个引用,名字是ra,ra引用了a注意,ra声明的时候必须同时给出它到底引用了谁int& ra; //只声明不指明是不对的 。还有,引用一旦声明,就不能再修改到其他变量上了,这与指针不同 。ra = b; //这是不行的,因为已经int &ra = a了c语言是国际上广泛流行的,很有发展前途的计算机高级语言.它适合作为系统描述语言,即可用来编写系统软件,也可用来编写应用软件.早期的操作系统等系统软件主要是用汇编语言编写的(包括unix操作系统在内).由于汇编语言依赖于计算机硬件,程序的可读性和可移植性都比较差.为了提高可读性和可移植性,最好改用高级语言,但一般的高级语言难以实现汇编语言的某些功能(汇编语言可以直接对硬件进行操作),例如:对内存地址的操作,位操作等).人们设想能否找到一种既具有一般高级语言特性,又具有低级语言特性的语言,集它们的优点于一身.于是,c语言就在这种情况下应运而生了.c语言是在b语言的基础上发展起来的,它的根源可以追溯到algol60.1960年出现的algol60是一种面向问题的高级语言,它离硬件比较远,不宜用来编写系统程序.1963年英国的剑桥大学推出了cpl(combinedprogram-minglanguage)语言.cpl语言在algol60的基础上接近了硬件一些,但规模比较大,难以实现.1967年英国剑桥大学的matinrichards对cpl语言作了简化,推出了bcpl(basiccombinedprogramminglanguage)语言.1970年美国贝尔实验室的kenthompson以bcpl语言为基础,又作了进一步简化,设计出了很简单的而且很接近硬件的b语言(取bcpl的第一个字母),并用b语言写第一个unix操作系统,在pdp-7上实现.1971年在pdp-11/20上实现了b语言,并写了unix操作系统.但b语言过于简单,功能有限.1972年至1973年间,贝尔实验室的d.m.ritchie在b语言的基础上设计出了c语言(取bcpl的第二个字母).c语言既保持了bcpl和b语言的优点(精练,接近硬件),又克服了它们的缺点(过于简单,数据无类型等).最初的c语言只是为描述和实现unix操作系统提供一种工作语言而设计的.1973年,k.thom-pson和d.m.ritchie两人合作把unix的90%以上用c改写(unix第5版.原来的unix操作系统是1969年由美国的贝尔实验室的k.thompson和d.m.ritchie开发成功的,是用汇编语言写的).后来,c语言多次作了改进,但主要还是在贝尔实验室内部使用.直到1-975年unix第6版公布后,c语言的突出优点才引起人们普遍注意.1977年出现了不依赖于具体机器的c语言编译文本《可移植c语言编译程序》,使c移植到其它机器时所做的工作大大简化了,这也推动了unix操作系统迅速地在各种机器上实现.例如,vax,at&t等计算机系统都相继开发了unix.随着unix的日益广泛使用,c语言也迅速得到推广.c语言和unix可以说是一对孪生兄弟,在发展过程中相辅相成.1978年以后,c语言已先后移植到大,中,小,微型机上,已独立于unix和pdp了.现在c语言已风靡全世界,成为世界上应用最广泛的几种计算机语言之一.以1978年发表的unix第7版中的c编译程序为基础,brianw.kernighan和dennism.ritchie(合称k&r)合著了影响深远了名著《thecprogramminglan-guage》,这本书中介绍的c语言成为后来广泛使用的c语言版本的基础,它被称为标准c.1983年,美国国家标准化协会(ansi)根据c语言问世以来各种版本对c的发展和扩充,制定了新的标准,称为ansic.ansic比原来的标准c有了很大的发展.k&r在1988年修改了他们的经典著作《thecprogra-mminglanguage》,按照ansic的标准重新写了该书.1987年,ansic又公布了新标准--87ansic.目前流行的c编译系统都是以它为基础的.

    推荐阅读