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

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. 【转帖】计算机网络协议(三)——UDP、TCP、Socket

    计算机网络协议(三)——UDP.TCP.Socket 2019年09月04日 11:09:41 to_be_better_one 阅读数 28794 文章标签: 计算机网络UDPTCPSocket 更 ...

  2. Pytest执行用例报Hint: make sure your test modules/packages have valid Python names.

    近日,使用Pytest+Appium 实现APP端UI自动化,遇到Pytest收集用例失败的情况. 报错信息如下: test_room.py:None (test_room.py) ImportErr ...

  3. 使用内存地址点亮LED—跟51单片机一样写代码教学(初步入门)

    51单片机点亮一个小灯 #include <rge52.h> sbit LED = P0^ void main(void) { P0 = 0XFE; // 总线操作 sfr P0 0X80 ...

  4. python中检测某个变量是否有定义

    目录 第一种方法使用内置函数locals() 第二种方法使用内置函数dir() 第三种方法使用内置函数vars() 第一种方法使用内置函数locals() 'testvar' in locals(). ...

  5. 导出excel的功能效果实现

    <el-button @click="exportExcel" > <i style="display: inline-block;"> ...

  6. docker部署Eurake服务,服务节点无法注册服务

    前言 昨天在部署一个docker项目时遇到了一个问题,故记录下来. 环境说明 Centos7 Docker version 18.06.3-ce, build d7080c1 问题说明 该项目分别启动 ...

  7. 音视频入门-01-认识RGB

    * 音视频入门文章目录 * RGB 简介 RGB 色彩模式是工业界的一种颜色标准,是通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB 即是代表红 ...

  8. gRPC Golang/Python使用

    gRPC Golang/Python使用 以前开发网站都是用http协议,学过TCP/IP协议的人都知道,在传输层TCP的基础上,应用层HTTP就是填充了一定规则的文本. 1.gRPC使用和介绍 工作 ...

  9. hdu 4324

    思路待整理 #include<cstdio> #include<iostream> #include<vector> #include<queue> # ...

  10. MyEclipse j2ee工程 WEB-INF 目录内容显示

    公司项目,使用的ant打包技术,,,蛋疼刚开始以为每次改个java代码都要ant 构建编译一把3-4分钟,很没有效率,, 然后实际使用中发下,可以用 auto building 和tomcat 的re ...