指针运算
一、赋值运算
指针变量可以互相赋值
px = py;
也可以赋值某个变量的地址
int *px = &a;
赋值一个具体的地址
pz = NULL;
二、算术运算
可以进行四种算术运算:++ ,—- ,+ ,-
-
自增自减运算 例: int *ptr; //假设ptr是一个指向地址为1000的整型指针
ptr++; //运算完后ptr指向位置1004
指针每一次递增(递减),表示指针指向下一个(上一个)元素的存储单元 注意: 这个运算不会影响内存中元素的实际值 指针在递增或递减时跳跃时的字节数取决于指针所指向变量数据类型的长度(int 4个字节 char 1个字节) -
增减运算 指针变量加上或减去一个整形数。加几就是向后移动几个单元,减几就是向前移动几个单元。 //定义三个变量,假设它们地址为连续的,分别为 4000、4004、4008
int x, y, z;
//定义一个指针,指向 x
int *px = &x;
//利用指针变量 px 加减整数,分别输出 x、y、z
printf("x = %d", *px);*
//px + 1,表示,向前移动一个单元(从 4000 到 4004)
//这里要**先(px + 1),再*(px + 1)获取内容**,因为单目运算符“*”优先级高于双目运算符“+”
printf("y = %d", *(px + 1));
printf("z = %d", *(px + 2));
三、关系运算
有指针变量 px、py;
px > py 表示 px 指向的存储地址是否大于 py 指向的地址px < py 表示 px 指向的存储地址是否小于 py 指向的地址px == py 表示 px 和 py 是否指向同一个存储单元px == 0 和 px != 0 表示 px 是否为空指针
通常用于数组
#include <stdio.h>
const int MAX = 3;
int main()
{
int var[] = {10, 100, 200};
int i, *ptr;
ptr = var;
i = 0;
while ( ptr <= &var[MAX - 1] )
{
printf("存储地址:var[%d] = %p\n", i, ptr );
printf("存储值:var[%d] = %d\n", i, *ptr );
/* 指向下一个位置 */
ptr++;
i++;
}
return 0;
}
/*
结果:
存储地址:var[0] = 0x7ffeee2368cc
存储值:var[0] = 10
存储地址:var[1] = 0x7ffeee2368d0
存储值:var[1] = 100
存储地址:var[2] = 0x7ffeee2368d4
存储值:var[2] = 200
*/
|