13、关于引用的一个例子

1、源程序
#include "stdio.h"
void fun(int x,int pp[],int *n)
{
int i,j=0;
for(i=1;i<=x;i+=2)
    if(!(x%i)) pp[j++]=i;
*n=j;
}

int main()
{
int x,aa[1000],n,i;
printf("input an num:\n");
scanf("%d",&x);
fun(x,aa,&n);
for(i=0;i<n;i++)
 printf(" %d ",aa[i]);
printf("\n");
}
2、程序简单,需要引起注意的地方是引用(&)。
1)  什么是引用(Reference)?
     (1) 类型为T的引用型变量,该变量实际上没有存储T类型数据的存储空间,而只存储一个指向T类型数据的索引      (索引的实质是一个内存地址),该索引指向的T类型数据称为被引用变量;
     (2) 对引用型变量进行除赋值以外的一切操作,相当于对被引用变量进行操作;
     (3) 用实体变量向引用型变量赋值,实体变量的值并没有被复制,而只是将该实体变量的索引存入引用型变量。
例: double a=1.5, &b=a, &c=b; 
          double x=2.5, y=x, z=y;

其中,a为实体形变量,南明b,c是引用形变量。
引用的主要功能是传 递函数的参数和返回值。
2)引用需要注意的地方
(1)reference要求有初值,不存在NULL引用。
3)引用和指针的区别和联系
(1)不存在NULL引用,引用必须与合法的存储单元关联;而指针则可以是NULL。
(2)指针在定义的时候不必初始化,可以在定义后面的任何地方重新赋值.而引用在创建是必须初始化。
(3)引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用;而指针在任何时候都可以改变为指向另一个对象。给引用赋值并不是改变它和原始对象的绑定关系,引用“从一而终”。
(4)由于没有所谓的 null reference 所以所以在使用前不需要进行测试其是否有值.,而使用指针则需要测试其的有效性。
(5) “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小。
typeid(T) == typeid(T&) 恒为真,sizeof(T) == sizeof(T&) 恒为真,但是当引用作为成员时,其占用空间与指针相同。
(6)指针是一个实体,而引用仅是个别名(绰号)。
  它们的联系:
都有地址的概念,指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。
(1)引用在语言内部用指针实现。
(2)引用是操作受限了的指针(仅容许取内容操作)。
(3)通俗的话,把一个变量的地址赋给指针,相同于你将一个房间的钥匙交给了某人,任他处理这个房间,而采用变量的引用形式,相同于你允许某人进这个房间,但是不让他动其它东西,只是看看。


 

发布了288 篇原创文章 · 获赞 31 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/hopegrace/article/details/104589193
今日推荐