指针用法专题 | 您所在的位置:网站首页 › 双指针的用法 › 指针用法专题 |
概述: C程序设计中使用指针可以使程序简洁、紧凑、高效
有效地表示复杂的数据结构
动态分配内存
得到多于一个的函数返回值
一、指针的基本用法 1.在计算机内存中,每一个字节单元(1Byte = 8bit;),都有一个编号,称为地址。 short i;//2个字节 float k;//4个字节 编译或函数调用时为其分配内存单元; 变量是对程序中数据存储空间的抽象。 2.在C语言中,内存单元的地址称为指针,专门用来存放地址的变量,称为指针变量(在不影响理解的情况中,有时对地址、指针和指针变量不区分,通称指针) 指针变量的说明 一般形式: * 例如:char *pName; 指针的存储类型是指针变量本身的存储类型。 指针说明时指定的数据类型不是指针变量本身的数据类型,而是指针目标的数据类型。简称为指针的数据类型。 3.指针在说明的同时, 也可以被赋予初值,称为指针的初始化 一般形式是: * = ; 例如:int a, *pa=&a; 在上面语句中,把变量a的地址作为初值赋予了刚说明的int型指针pa。 int a = 3; //int a; a = 3; int *pa = &a; //int * pa; pa = &a; 例子: #include int main() { int a =10;//a是一个变,占四个字节 int *p;//p也是一个变,占四个字节 p = &a; printf("&p: %p %d\n",&p, sizeof(p)); printf( "%p %p\n", p, &a); return 0; }4.指针指向的内存区域中的数据称为指针的目标 如果它指向的区域是程序中的一个变量的内存空间, 则这个变量称为指针的目标变量。 简称为指针的目标。 5.引入指针要注意程序中的px、*px 和 &px 三种表示方法的不同意义。设px为一个指针,则: px — 指针变量, 它的内容是地址量 *px — 指针所指向的对象, 它的内容是数据 &px — 指针变量占用的存储区域的地址,是个常量 6.指针的赋值运算指的是通过赋值运算符向指针变量送一个地址值 向一个指针变量赋值时,送的值必须是地址常量或指针变量,不能是普通的整数(除了赋零以外) 指针赋值运算常见的有以下几种形式: 把一个普通变量的地址赋给一个具有相同数据类型的指针 double x=15, *px; px=&x; 把一个已有地址值的指针变量赋给具有相同数据类型的另一个指针变量.例如: float a, *px, *py; px = &a; py = px; 把一个数组的地址赋给具有相同数据类型的指针。例如: int a[20], *pa; pa = a; //等价 pa = &a[0] 二、指针的运算1.指针运算是以指针变量所存放的地址量作为运算量而进行的运算 指针运算的实质就是地址的计算 指针运算的种类是有限的,它只能进行赋值运算、算术运算和关系运算
不同数据类型的两个指针实行加减整数运算是无意义的 px+n表示的实际位置的地址量是: (px) + sizeof(px的类型) * n px-n表示的实际位置的地址量是: (px) - sizeof(px的类型) * n 2.两指针相减运算 px-py 运算的结果是两指针指向的地址位置之间相隔数据的个数因此,两指针相减不是两指针持有的地址值相减的结果。 两指针相减的结果值不是地址量,而是一个整数值,表示两指针之间相隔数据的个数 3.指针关系运算 两指针之间的关系运算表示它们指向的地址位置之间的关系。指向地址大的指针大于指向地址小的指针。 指针与一般整数变量之间的关系运算没有意义。但可以和零进行等于或不等于的关系运算,判断指针是否为空。 int main() { int a[]={5,8,7,6,2,7,3}; int y,*p=&a[1]; y=(*--p)++; printf(“%d ”,y); printf(“%d”,a[0]); }输出:5 6 注意指针的当前值 int main() { int i, *p, a[7]; p = a; for(i = 0; i |
CopyRight 2018-2019 实验室设备网 版权所有 |