网站做的好的公司,开发区网站制作公司,wordpress固定连接出错,临桂区住房和城乡建设局门户网站#x1f4dd;前言 上篇文章C语言——指针#xff08;一#xff09;初步讲解了#xff1a; 1#xff0c;指针与指针变量 2#xff0c;指针变量的基本使用#xff08;如何定义#xff0c;初始化#xff0c;引用#xff09; 这篇文章我们进一步探讨#xff0c;使用指针…前言 上篇文章C语言——指针一初步讲解了 1指针与指针变量 2指针变量的基本使用如何定义初始化引用 这篇文章我们进一步探讨使用指针中有关指针的运算 1指针运算 2指针变量类型对指针使用的影响 个人简介努力学习ing 个人专栏C语言入门基础 CSDN主页 愚润求学 每日鸡汤不管怎么样明天又是新的一天 文章目录 一指针运算1指针-整数2指针-指针3指针的关系运算 二指针变量类型对指针使用的影响1影响指针解引用权限2影响指针-整数的运算 一指针运算
指针的基本运算主要分三种分别是 1指针±整数 2指针-指针 3指针的关系运算
1指针±整数
因为数组元素在内存中是连续存放的那么我们能不能通过【首地址偏移量】的方式来得到其他元素的地址呢 答案是可以的比如下面的代码
int main()
{int arr[5] { 1,2,3,4,5 }; int* p arr[0]; //取出首元素的地址放入指针pfor (int i 0; i 5; i){printf(%d , *(p i)); //(pi)就是指针整数的形式}
}输出结果是 1 2 3 4 5 也就是说 (pi)所代表的地址随着i每次加1地址也跳跃到了后面的元素 所以 **指针±整数**就是以指针为首地址来计算出偏移量为整数的元素的地址让指针实现向前和向后的跳跃。
2指针-指针
前提条件两个指针必须指向同一块空间比如同一个数组 来看下面代码
int main()
{int arr[5] { 1,2,3,4,5 };int* p1 arr[0]; //p1存放的是第一个元素的地址int* p2 arr[4]; //p2存放的是最后一个元素的地址printf(p1 %p\n, p1); //打印指针p1的内容printf(p2 %p\n, p2); //打印指针p2的内容printf(p2 - p1 %d\n, p2 - p1); //大地址-小地址printf(p1 - p2 %d\n, p1 - p2); //小地址-大地址return 0;
}输出结果 我们可以发现 虽然指针是用16进制数来表示的但是输出结果并不是将两个16进制数单纯的进行加减运算输出结果也并不是一个指针。 实际上指针-指针的绝对值是指针之间元素的个数 对于指针±整数指针-指针我们可以类比理解 日期±天数得到的是日期 日期-日期得到的是天数 在这里日期就好比地址天数就好比整数 3指针的关系运算
其实就是指针的大小比较例如
int main()
{int arr[5] { 1,2,3,4,5 };int* p arr[0];while (p arr 5) //这里就是比较p和arr5的16进制数大小{printf(%d , *p);p;}return 0;
}输出结果是 1 2 3 4 5 二指针变量类型对指针使用的影响
1影响指针解引用权限
指针的解引用权限通俗来讲就是一次性能操作几个字节。
我们来看下面两段代码 两段代码都是通过对指针解引用来操作n给n赋值。区别在于左边的指针变量是int* 类型但是右边的指针变量是char*类型
我们在调试时观察n的变化 发现 用 int* 类型的指针变量时n被完全改成了0其实被改了4个字节 从 0x11223344 → 0x00000000 用 char*类型的指针变量时n只被改了一部分其实被改了1个字节: 从 0x11223344 → 0x11223300 这就是为什么图左的n值减少了120转换为10进制
上述现象都是因为指针变量的类型决定了指针解引用的权限 char* 的指针解引用只能一次访问1个字节但是int* 的指针解引用就可以访问4个字节 同理 double* 可以访问8个字节 short* 可以访问2个字节
2影响指针±整数的运算
来看下面的代码
int main()
{int n 10;char* p1 (char*)n;int* p2 n;printf(n %p\n, n);printf(p1 %p\n, p1);printf(p11 %p\n, p11);printf(p2 %p\n, p2);printf(p21 %p\n,p21);return 0;
}运行结果我们观察地址的变化 我们发现 对于char* 类型的指针变量p11操作让地址向后跳过了1个字节 对于int* 类型的指针变量p21操作跳过了让地址向后跳过了4个字节
这就是指针变量类型不同对指针±整数的影响 指针变量的类型决定了指针向前或者向后走一步的距离跳过的字节的大小 我的分享也就到此结束啦 要是我的分享也能对你的学习起到帮助那简直是太酷啦 若有不足还请大家多多指正我们一起学习交流 公主王子点赞→收藏⭐→关注 感谢大家的观看和支持最后☺祝愿大家天天开心