C/C++指针 引用

来源:互联网 发布:java服务器硬件配置 编辑:程序博客网 时间:2024/06/15 21:01

通过代码+注释来说明问题

#include <stdio.h>struct box {int a;int c;box(int i,int j){a=i;c=j;}};void func1();void func2(int *a,int *b);void func3(int *p);void func4(int &c);void func5(int *&p);void main(){func1();int a=111;int b=1234;func2(&a,&b);// & 此时为取地址printf("%d %d\n",a,b);int *p=NULL;func3(p);printf("%p\n",p);int c=1111;func4(c);printf("%d\n",c);int *q=NULL;func5(q);printf("%p\n",q);}void func1(){int num=100;int block=1000;box bBOX(3,3);// 指针是一个变量,指针变量p中存储的是(指向num代表的内存单元的)地址int *p=#// 引用和原来的变量num是一个东西,r和num都指的是num所代表的存储单元int &r1=num;box &r2=bBOX;// 指针可以不用初始化,但引用必须初始化int *ptrA;// 指针可以为NULL,但是引用不可以为空int *ptrB=NULL;// 有const指针,但没有const引用// 指针可以有多级指针,但是引用只能有一级int   *p1 = #int  **p2 = &p1;int ***p3 = &p2;// 指针的值可以改变,但是引用是不可以改变的p=█// sizeof(指针)得到的是指针的大小,sizeof(引用)得到的是所指变量(对象)的大小printf("%d %d %d \n",sizeof(p),sizeof(r1),sizeof(r2));// 指针和引用的自增(++)意义不同,引用根本不能进行自加操作p1++;p2++;p3++;// & 一定要将 引用 和 取地址 区分开// }// 参数指针型形参变量,但这是一种拷贝,注意函数体内// 修改的是指针所指的空间,不是指针本身的空间,// 所以不要认为这不是一种拷贝void func2(int *a,int *b){int c; c = *a;*a = *b;*b =  c;}// 参数指针型形参变量,但这是一种拷贝void func3(int *p){int a=100;p=&a;}// // 参数引用型(普通类型)形参变量void func4(int &c){int a=100;c=a;}// 参数引用型(指针)形参变量,传递的是指针的本身,不是临时拷贝void func5(int *&p)// 得到(取指针p的地址的)变量,操作的是存储指针变量的空间{int a=100;p=&a;}


0 0
原创粉丝点击