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

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. WUSTOJ 1279: Wallace and His Pet(Java)

    1279: Wallace and His Pet 题目   给出一句话(英文),单词总数不超过1000,每个单词不超过10个字符,一句话只有一个唯一的字符"."(句点).将这句话 ...

  2. 1192: 零起点学算法99——The sum problem(C)

    一.题目 http://acm.wust.edu.cn/problem.php?id=1192&soj=0 二.分析 要求从序列1,2,3,,,N,中截取一部分使他们的和为M 输入多组数据 输 ...

  3. 体验Managed Extensibility Framework精妙的设计

    MEF(Managed Extensibility Framework)是.NET Framework 4.0一个重要的库,Visual Studio 2010 Code Editor的扩展支持也是基 ...

  4. vi 使用系统剪贴板(clipboard)

    ref : https://www.jianshu.com/p/771b95e34293 http://www.bubuko.com/infodetail-469867.html 在vi中,如果编译时 ...

  5. QCache<key,T> 就定义了一个缓存,其类似于map,好处是QCache自动获得被插入对象的所有权,控制所有对象的costs总和(自动管理对象的生存时间。正经数据是不会用到它的,辅助控制才有可能用到它)

    在软件开发中,我们经常需要在内存中存储一些临时数据用于后续相关计算.我们一般把这些数据存储到某个数组里,或者STL中的某个合适的容器中.其实,在Qt中直接为我们提供了一个QCache类专用于这种需求. ...

  6. rman备份跳过read only数据文件,减少备份总量,加快备份时间

    客户需求,RMAN备份时间过长,想缩短备份时间,优化备份. 客户基于表空间进行历史数据归档的方式,将历史的表空间进行read only,想让RMAN跳过只读表空间,减少RMAN备份的数据总量,从而缩短 ...

  7. 西门子软件sinutrain-for-sinumerik-operate-v4.8安装报错的处理

       西门子软件sinutrain-for-sinumerik-operate-v4.8安装报错的处理 安装时报错提示: 原因: 可能缺少某些文件 处理: 安装 海康ivms-4200后,可直接安装西 ...

  8. (六)Redis之数据结构之Set

    一.常用方法 和List类型不同的是,Set集合中不允许出现重复的元素 添加/删除元素 获取集合中的元素 集合中的差集运算 集合中的交集运算 集合中的并集元算 扩展命令 1和2 添加/删除元素和获取集 ...

  9. jvm垃圾回收器介绍

    上篇文章中我们讨论了jvm的内存区域,这篇文章我们来讨论针对的内存区域的垃圾回收机制. 其实针对垃圾回收我们通常考虑三个问题:1.哪些内存需要回收?2.什么时候回收?3.如何回收?下面我们针对这三个问 ...

  10. Android Service的有关总结

    来自一位网友的评论 1.使用方式 startService 启动的服务 主要用于启动一个服务执行后台任务,不进行通信.停止服务使用stopService bindService 启动的服务 该方法启动 ...