【C进阶】int &x,int* x,int *x,int**。解释说明

int a    :一个int类型,名称叫a

int* a:一个整形的指针,名称叫a

int *a:一个指向整型的地址,名称叫a(一级指针,表示a所指向的地址里面存放的是一个int类型的值)

int **a :二级指针,表示a所指向的地址里面存放的是一个指向int类型的指针(即a指向的地址里面存放的是一个指向int的一级指针)

int & a:声明一个int引用类型,名称叫a


C语言中int *a与int* a的区别:

用法上没有区别,理解上有区别。前者表示a地址指向的类型是整形,后者表示a是个整形的指针。


int *p 与 int **p 之区别:

一级指针存放变量的地址,指向的值是变量的内容。如int* p={1,2,3}, p=数组的首地址,*p=数组的第一个值;    

二级指针存放一级指针的地址,指向一级指针。如int*p ={1,2,3}, int**pp=&p,pp=指针p的首地址,*pp=数组的首地址,**pp=数组第一个值1。


int &

a)  声明引用时必须指定它代表的是哪一个变量,即对它初始化。

int &a=b;这样是声明a是变量b的引用

如果是int &a;这样就是错的,没有指定a代表哪一个变量。

b)  引用与其所代表的变量共享同一内存单元,系统并不为引用另外分配存储单元;

这个应该好理解;就像前面所说的,张三和三娃子都是同一个人,三娃子只是张三的别名。

因此,对于 int &a=b;这个例子来说,要输出a和b 的地址,肯定是相同的。

c)  怎样区分&是引用还是取地址符呢?方法是:判断&a这样的形式前是否有类型符

int &a=b;如果有类型符(int)则是引用,否则是取地址运算符。

d)  引用的初始化,可以是一个变量名,也可以是另一个引用

换句话说:张三的别名可以是三娃子,三小子……及其他多个别名

而三娃子也可以有其他的别名,比如说:老三,小三等

用程序可以这样:

int a=1; //这里是定义一个整形变量

int &b=a;//声明b是整型变量a的别名

int &c=b;//声明c是整型引用变量b的别名

int &d=a;//声明d是整型变量a的别名

e)  引用初始化后不能再被重新声明为另一变量的别名

即三娃子既然是指张三这个人,就不能让其他人也叫三娃子

即一个别名只能对应一个原始变量,但是一个原始变量可以有多个别名,而且别名也可以

由自己的别名。

int &b=a;//这个声明语句中的&是一个引用。。。int *p=&b;//这个指针初始化语句中的&是取地址运算符

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章