本文共 1767 字,大约阅读时间需要 5 分钟。
虽然现在工作使用的是java编程语言,但是学过C语言的都知道java的许多语言特性从C的高级版本C++那里进行沿用和发展。那两者之间到底有何区别呢?
指针是c语言最大的优点,它可以使用户几乎可以访问计算机的所有内存资源和其他部分资源(就是指那里打拿里)。JAVA语言让编程者无法找到指针来直接访问内存无指针,并且增添了自动的内存管理功能,从而有效地防止了C语言中指针操作失误造成的系统崩溃。但也不是说JAVA没有指针,虚拟机内部还是使用了指针,只是外人不得使用而已。这有利于Java程序的安全。
前面说到这么多,到底指针是个什么东西?
指针是C语言中的一种数据类型,存放的是数据的内存单元地址。
计算机系统的内存拥有大量的存储单元(每个存储单元的大小为1字节),为了便于管理,必须为每个存储单元编号,改编号就是存储单元的“地址”。每个存储单元拥有一个唯一的地址。 指针变量除了可以存放变量的地址外,还可以存放其他数据的地址,例如可以存放数组和函数的地址。指针的定义格式:
数据类型 *指针变量名; 指针的初始化: 指针变量名=初始化地址值说明:
" * "
表示定义的是一个指针变量。指针变量的前面必须有" * "
。"初始值地址"
一般都是&变量名称
、&数组变量名称
、&数组元素
,注意:这些变量名称必须要是已经定义过的,定义过了之后才能使用。数据类型符
指的是定义的指针变量所指向的变量的数据类型,可以是任何基本数据类型,也可以是其他数据类型。 举个栗子:#inludevoid main(){ int a,*p; a=10; p=&a; printf("p=%d\n",*p);}
#includevoid main(){ int a=10,*p=NULL; p=&a; printf("p=%d\n",*p);}
“数据类型符号”
必须与其“初始地址值”
中保存的数据的类型相同。*
指针运算符“ * ”
的作用是取指针变量所指向的地址中的内容,与地址运算符“ & ”
是相逆的,它是单目运算符号。指针运算符的作用对象必须是地址
,可以是已赋值的指针变量,也可以是变量或数组元素的地址。eg1:#includevoid main(){ int a=10,*p; p=&a; //输出的是指针p所指向的变量的地址 printf("p=%d\n",p); //输出的是指针p所指向的变量的内容 printf("p=%d\n",*p);}//打印结果p=1703724p=10Press any key to continue
*
取地址运算符“ & ”
的作用就是取变量的地址,是单目运算符。其作用对象为已经定义的变量或数组元素,但是不能为数组名(int *p,a[10];p=&a
这种形式是错误的,可以将p=&a修改为p=&a[1]
的形式)。取地址运算符的运算结果是得到一个变量的地址。
#includevoid main(){ int a[]={ 1,2,3},*p; //打印a[0]的地址 printf("a[0] address=%d\n",&a[0]); //将a[0]的地址赋值给p p=&a[0]; //打印p指针变量的内容 printf("p=%d\n",*p); //打印p指针变量此时所指向的地址,应该和前面a[0]的地址一致 printf("p=%d\n",p);}//打印结果:a[0] address=1703716p=1p=1703716Press any key to continue
转载地址:http://nphwi.baihongyu.com/