C指针的运算
- 指针的运算在数组中才有意义
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指针的运算的更多相关文章
- C ~ 指针的运算
一 :取地址运算“&”与取内容运算“*”: 单目运算“&”是取操作对象的地址 , “*”是取指针指向的对象的内容 , 两者互为逆运算 int x , *p ; p = &x ; ...
- go语言笔记——指针,和C用法以及本质一样,但不支持指针的+-运算!
4.4.2 值类型和引用类型 所有像 int.float.bool 和 string 这些基本类型都属于值类型,使用这些类型的变量直接指向存在内存中的值. Go 语言的取地址符是 &,放到一个 ...
- 听翁恺老师mooc笔记(6)--指针运算
指针值加1就是将指针值加上sizeof(指针所指变量的类型) 1+1=2,那么指针加1是加上了1这个数字吗?试一下,在代码中定义了char数组,char也是整数,数组名是ac,ac中有10个元素,0- ...
- #运算符、不同的指针类型、数组和指针、指针运算、堆、栈、静态区、只读区、下标VS指针
#运算符:用于在预编译期将宏参数转换为字符串 #define CONVERS(x) #x //注:没用双引号包括. 不同类型的指针占用的内存空间大小相同. 局部变量 定义: a[5]; 打印a[ ...
- C++指针的算术运算 、关系运算
下面随笔是关于指针的算术运算 .关系运算. 指针类型的算术运算 指针与整数的加减运算 指针++,--运算 指针类型的算术运算 指针p加上或减去n 其意义是指针当前指向位置的前方或后方第n个数据的起始位 ...
- C语言 指针小结
指针 -->指针变量 类型名 *变量名 int *point1; char *point2; 注意:*p可以直接使用,它代表指针p指向的变量,*p可以当做被指向的变量使用!~~~~ 一个变量的地 ...
- C语言-指针
C指针基础知识 C语言中,指针无疑是最令人头疼的.今天无事就来学学C语言的指针,在此留下点笔记,仅供个人参考. 首先要搞懂的是,指针是什么? 指针:是用来存放内存地址的变量. 不管是什么类型的指针,存 ...
- delphi.指针.应用
注:初稿...有点乱,可能增删改... 因为指针应用,感觉不好写,请大家指出错误,谢谢. 注意: 本文着重点讲的是指针的各类型的应用或使用,而不是说这种方法不应该+不安全+危险+不提倡使用. 其它:本 ...
- C/C++入门基础---指针(2)
5,数组指针的不同含义 int a[5][10]; printf(%d, %d, %d\n", a, a+1, &a+1); //1310392,1310432,1310592 a ...
随机推荐
- linux中LVM介绍及实验过程
LVM LVM这个词不仅一次出现过,在安装Centos时,磁盘分区时,默认分区就是使用LVM方式分区:再一个就是在OpenStack部署时候用到LVM作为后端存储.对LVM的理解还是不太清晰,查询资料 ...
- mac 已损坏 移至废纸篓
1.问题描述: 从网页下载的安装包,总是提示“已损坏,移至废纸篓”这类的信息 2.原因: 系统版本过高,对安全性进行了校验. 3.解决方案:命令行输入以下命令,然后输入密码 sudo spctl -- ...
- SQL,NoSQL和NewSQL
一:概念 SQL(Structured Query Language):数据库,指关系型数据库.主要代表:SQL Server.Oracle.MySQL.PostgreSQL. NoSQL(Not O ...
- C++:标准模板库map
一:介绍 map是STL的关联式容器,以key-value的形式存储,以红黑树(平衡二叉查找树)作为底层数据结构,对数据有自动排序的功能. 命名空间为std,所属头文件<map> 注意:不 ...
- SDOI2010_大陆争霸(邻接表存图)
题目描述 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的 克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭 的神曾·布拉泽,而克里斯国信仰象征光明和永恒的神斯 ...
- python — 索引与pymysql模块
1. 索引 1.1 索引原理 1.什么是索引 ?-- 目录 索引就是建立起的一个在存储表阶段就有的一个存储结构,能在查询的时候加速. 2.索引的重要性: 读写比例 为 10:1,所有读(查询)的速度就 ...
- 资源|《美团机器学习实践》PDF+思维导图
今天再给大家推荐一本由美团算法团队出版的<美团机器学习实践>,下载链接见文末. 美团算法团队由数百名优秀算法工程师组成,负责构建美团这个生活服务互联网大平台的"大脑", ...
- Session共享问题---理论
随着网站访问量增加,初期的一台服务器已经完全不能支持业务,这个时候我们就需要增加服务器设备,来抗住请求的增量,如下所示: 负载均衡的目的本来就是要为了平均分配请求,所以没有固定第一次访问和第二次访问的 ...
- Nginx 不支持WebSocket TCP
proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";
- (一)JMS简介
一.简介 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进 ...