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

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();
}

输出结果:

C指针的运算的更多相关文章

  1. C ~ 指针的运算

    一 :取地址运算“&”与取内容运算“*”: 单目运算“&”是取操作对象的地址 , “*”是取指针指向的对象的内容 , 两者互为逆运算 int x , *p ; p = &x ; ...

  2. go语言笔记——指针,和C用法以及本质一样,但不支持指针的+-运算!

    4.4.2 值类型和引用类型 所有像 int.float.bool 和 string 这些基本类型都属于值类型,使用这些类型的变量直接指向存在内存中的值. Go 语言的取地址符是 &,放到一个 ...

  3. 听翁恺老师mooc笔记(6)--指针运算

    指针值加1就是将指针值加上sizeof(指针所指变量的类型) 1+1=2,那么指针加1是加上了1这个数字吗?试一下,在代码中定义了char数组,char也是整数,数组名是ac,ac中有10个元素,0- ...

  4. #运算符、不同的指针类型、数组和指针、指针运算、堆、栈、静态区、只读区、下标VS指针

    #运算符:用于在预编译期将宏参数转换为字符串 #define CONVERS(x)  #x   //注:没用双引号包括. 不同类型的指针占用的内存空间大小相同. 局部变量 定义: a[5]; 打印a[ ...

  5. C++指针的算术运算 、关系运算

    下面随笔是关于指针的算术运算 .关系运算. 指针类型的算术运算 指针与整数的加减运算 指针++,--运算 指针类型的算术运算 指针p加上或减去n 其意义是指针当前指向位置的前方或后方第n个数据的起始位 ...

  6. C语言 指针小结

    指针 -->指针变量 类型名 *变量名 int *point1; char *point2; 注意:*p可以直接使用,它代表指针p指向的变量,*p可以当做被指向的变量使用!~~~~ 一个变量的地 ...

  7. C语言-指针

    C指针基础知识 C语言中,指针无疑是最令人头疼的.今天无事就来学学C语言的指针,在此留下点笔记,仅供个人参考. 首先要搞懂的是,指针是什么? 指针:是用来存放内存地址的变量. 不管是什么类型的指针,存 ...

  8. delphi.指针.应用

    注:初稿...有点乱,可能增删改... 因为指针应用,感觉不好写,请大家指出错误,谢谢. 注意: 本文着重点讲的是指针的各类型的应用或使用,而不是说这种方法不应该+不安全+危险+不提倡使用. 其它:本 ...

  9. C/C++入门基础---指针(2)

    5,数组指针的不同含义 int a[5][10]; printf(%d, %d, %d\n", a, a+1, &a+1);  //1310392,1310432,1310592 a ...

随机推荐

  1. 25.Spark下载源码和安装和使用

    安装scala 上传安装包 解压 配置scala相关的环境变量 export SCALA_HOME=/opt/modules/scala-2.11.4 export PATH=$PATH:$SCALA ...

  2. DB2输出每隔10分钟的数据

    一.输出1-100的数据 此处参考 https://bbs.csdn.net/topics/390516027 with t(id) as ( as id from sysibm.sysdummy1 ...

  3. navicat-use

    https://blog.csdn.net/weixin_44496987/article/details/87186071

  4. 快速创建一个SpringBoot项目并整合Mybatis

    2019-09-15 一.Maven环境搭建 1.导入jar坐标 <project xmlns="http://maven.apache.org/POM/4.0.0" xml ...

  5. Python_Modbus_RTU_通讯Demo

    之前利用Python进行Modbus_TCP进行数据接收,本次需要利用串口进行数据传输,学习Modbus_RTU的简单实现 首先要在创建两个虚拟串口,利用VSPD工具即可.在一台电脑上实现数据的发送和 ...

  6. WUSTOJ 1239: n皇后问题(Java)

    题目链接:

  7. maven 依赖 无法下载到jar包,典型的json-lib包

    <dependency>            <groupId>net.sf.json-lib</groupId>            <artifact ...

  8. Golang语言编程规范

    Golang语言编程规范 一.说明 编程规范好,可避免语言陷阱,可有利团队协作,有利项目维护. 正常的Go编程规范有两种:编译器强制的(必须的),gofmt格式化非强制的(非必须). Go宣告支持驼峰 ...

  9. (五)CXF之添加拦截器

    一.需求分析 webService中的拦截器类似于servlet的Filter过滤器.一般用于调用服务前后先调用拦截器的方法. 二.案例 本章案例是基于上一章节的基础上添加拦截器的 2.1 服务端添加 ...

  10. (八)mybatis之多对多

    一.需求分析 需求:查询所有用户的信息以及每个用户所属的组的信息 分析:一个用户可以有多个组,一个组也可以由多个用户. 多对多,可以设置一张中间表,该表存放的是用户表和组表的对应关系. 二.创建数据库 ...