C程序设计中使用指针
可以使程序简洁、紧凑、高效
有效地表示复杂的数据结构
动态分配内存
得到多于一个都函数返回值
地址和变量
在计算机内存中,每一个字节(1Byte=8Bit)单元,都有一个编码,成为地址
或者说,内存以字节为单位,开始编号,每个编号可以称为地址
short i;占2个字节的内存
float k;占4个字节的内存
指针(内存单元的地址、是编号,是数字)
在C语言中,内存单元的地址称为指针,专门来存放地址的变量,称为指针变量
在不影响理解的情况中,有时对地址、指针和指针变量不区分,通称指针
一般形式如下:
<存储类型> <数据类型> *<指针变量名>;
int a ,*pa = &a;(&取地址符)
例如 char *pName;
指针的存储类型是指指针变量本身的存储类型
指针说明时指定的数据类型不是指针变量本身的数据类型,而是指针目标的数据类型。简称为指针的数据类型
指针指向到内存区域中的数据称为只针对目标
如果它指向到到区域是程序中的一个变量的内存空间,则这个变量称为指针的目标变量,简称为指针的目标
这里三个都可以表示目标变量的数值-126
注意:引入指针要注意程序中的px,*px和&px三种表示方法的不同意义。设px为一个指针,则:
px 指针变量,它的内容是地址量
*px 指针所指向的对象,它的内容是数据
&px 指针变量占用的存储区域的地址,是个常量
指针的赋值运算
指针的赋值运算指的是通过赋值运算符向指针变量送一个地址值
向一个指针变量赋值时,送的值必须是地址常量或指针变量,不能是普通的整数(除了赋零以外)
指针赋值运算常见的几种形式
把一个普通变量的地址赋给一个具有相同数据类型的指针
double x15,*px;
px=&x
把一个已有地址值的指针变量赋给具有相同数据类型的另一个指针变量
例如:
float a,*px,*py;
px = &a;
py = px;
把一个数组的地址赋给具有相同关数据类型的指针
int a[20] , *pa;
pa = a; //等价pa = &a[0]
两个指针可以同时存入同一个地址
指针占多少字节是由操作系统决定的,由操作系统与内存之间有多少根地址线决定
int a,*p;
p = &a;
自我思考:
注意区分指针中的几个变量
a变量存储的值,a变量存储空间的首地址
p变量存储的值,p变量存储空间的首地址
a,&a,p,*p,&p
p = &a;
*p = *(&a)= a;
*(&p)= &a = p;
于是得出,当* 遇到&时,相互抵消