• 指针的运算在数组中才有意义

int *p; p++,一定是在一片连续的区域才有意义,当然越界也会带来诸多问题。

void main()
{
int num = ;
int *p = #//这根本无界可言
p++;
printf("%d\n",*p);
getchar();
}

输出结果:

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
void main()
{
int num[] = {,,,,,,,,,};
int *a = num;
for (int *p =num+; p>=a;p--)
{
printf("%d\n", *p);
}
getchar();
}
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
void main()
{
int num[] = {,,,,,,,,,};
int *a = num;
a = a + ;//后移3个元素,到元素4
printf("%d\n",*a);//
a = a - ;//从元素4前移2个单位到元素2
printf("%d\n", *a);//
getchar();
}

输出结果:

  • 指针可以比大小,所谓大的地址上比较靠后,小的地址比较靠前,意义仅在于此,当然还得是在一个数组里的两个指针比较才有意义
  • *p++=====》*(p++)
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
void main()
{
int num[] = {,,,,,,,,,};
int*p = num;
for (int *p = num + ; p >= num;p--)
{
printf("值是----%d,地址是----%p\n",*p,p);
}
printf("%d,地址是:%p\n", *p++,p);//运算过程,*(p++) 1.p++,返回p,2.运算*p 3.p++
printf("值是%d,地址是%p\n", *p, p);
getchar();
}

输出结果:

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
void main()
{
int num[] = {,,,,,,,,,};
int*p = num;
for (int *p = num + ; p >= num;p--)
{
printf("值是----%d,地址是----%p\n",*p,p);
}
printf("%d,地址是:%p\n", *++p,p);//运算过程,*(++p ) 1.++p,从数组首元素地址推进到第一个元素的地址a[1],2.返回地址处于a[1]1的值
printf("值是%d,地址是%p\n", *p, p);
getchar();
}

输出结果:

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
void main()
{
int num[] = {,,,,,,,,,};
int*p = num;
for (int *p = num + ; p >= num;p--)
{
printf("值是----%d,地址是----%p\n",*p,p);
}
++p;
printf("%d,地址是:%p\n", *p,p);//运算过程,*(p++) 1.p++,返回p,2.运算*p 3.p++
getchar();
}

输出结果:

  • 指针相减:意义-----两个元素相隔的距离----当然要求是相同类型的元素地址;指针之差和指向的数值也没有任何意义
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
void main()
{
int a = , b = ;
int *p = &a;
int *q = &b;
printf("a,b两元素相隔距离%d\n", q-p);
getchar();
}

输出结果:

我们观测到两个变量的地址,windows操作系统下,打开计算器,选择程序员型工作模式,选择十六进制模式,用EE0减去ED4,得出结果后转十进制算出了12

当然相隔3个单位,每个整型长度为4,那么3个单位就相差12个字节

在数组中,指针相减可以有助于帮我们定位元素在数组中所处位置

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
void main()
{
int a[] = {,,,,,,,,,};
int *p1 = &a[];
int *p2 = &a[];
int *p3 = p1 + ;
printf("p3的地址%p,代表元素%d\n",p3,*p3);
printf("p1和p2地址相差%d单位\n", p2-p1);
getchar();
}

输出结果:

最新文章

  1. Spring 4 使用Freemarker模板发送邮件&amp;添加附件
  2. 【开源】OSharp3.3框架解说系列(7.1):初始化流程概述
  3. 烂泥:nginx负载均衡
  4. c# signalr聊天室开源资料
  5. OneApm
  6. SQL Server 2008 数据库同步的两种方式 (发布、订阅)
  7. iOS 消息转发
  8. [itint5]环形最大连续子段和
  9. Cocos2d-x之Touch事件处理机制
  10. 百度地图 iOS SDK - 坐标转换方法
  11. 八数码问题+路径寻找问题+bfs(隐式图的判重操作)
  12. 解析xml字符串时报“前言中不允许有内容”错误。
  13. 【转】Python之道
  14. Go的安装
  15. 自动化工具 Sikuli-Script 使用
  16. IBM推出新一代云计算技术来解决多云管理
  17. 云主机上配置lamp环境 php5.6+apache2.2.15+mysql5.1.73
  18. 验证二叉查找树 &#183; Validate Binary Search Tree
  19. wxpython 图像编程
  20. (win 7)使用puma以后,重启rails server报错: in `trap&#39;: unsupported signal SIGCHLD (ArgumentError)

热门文章

  1. Alt+~,Alt+Tab
  2. Appium+unittest+python登录app
  3. SASS摘要
  4. Linux (x86) Exploit 开发系列教程之一(典型的基于堆栈的缓冲区溢出)
  5. zabbix硬件监控以及服务
  6. SAS学习笔记9 利用SAS绘制地图
  7. Tomcat安装及其目录结构介绍
  8. ...:ES6中扩展运算符(spread)和剩余运算符(rest)详解
  9. B+Tree的基本介绍
  10. 基于【 centos7】五 || GitLab环境搭建