C ~ 指针的运算
一 :取地址运算“&”与取内容运算“*”:
单目运算“&”是取操作对象的地址 , “*”是取指针指向的对象的内容 , 两者互为逆运算
int x , *p ;
p = &x ;
&(*p) = p 表示指针 ; *(&x)= x 表示变量x
二 :指针的算术运算 :
指针的运算与其基类型有关 , 一般的,如果p是一个指针 ,n是一个正整数 ,则对指针 p 进行 +(-)操作后的实际地址是 :
p +(-)n*sizeof(基类型)
char *p ;
int *q ;
float *tk ;
//假设当前地址为 : p = 2110H , q = 2231H , tk = 2478H
p += 1 ; // p = p + 1 = 2111H
q += 4 ; // q = q + 4*4 = 2239H
tk -= 3 ; // tk = tk -3*8 = 246CH
三 : 指针自加 ,自减运算 :
指针的自加 ,自减运算也是地址运算
m = * p ++ 等价于 m = *(p ++)
取指针 p 当前所指变量的值赋给变量 m ; p 做加 1 运算 , 指向下一个目标变量 .
m = * ++ p 等价于 m = * ( ++ p)
p 做加 1 运算 , 指向下一个目标变量 ; 取指针 p 当前所指变量的值赋给变量 m .
m = (*p)++ 与 m = ++(*p)
前者是将指针 p 所指的变量的值赋给变量 m , 然后变量 *p 自加 1 ;
后者是将指针 p 所指的变量 *p 的值自加 1 后赋给变量 m .
四 :指针间的减法运算 :
指向同一组类型相同数据的指针之间可以进行减法运算 , 相减的结果表示两指针间相距的数据的个数 .
五 :指针的关系运算 :
p , q 指向同一个数组 , p > q 表示p 是否指向 q 所指位置的后面 , 若成立 则 表达式的值为 非 0 , 否则为 0 .
六 :指针的下标运算 :
p[i] = *(p + i) ;
C ~ 指针的运算的更多相关文章
- C指针的运算
指针的运算在数组中才有意义 int *p; p++,一定是在一片连续的区域才有意义,当然越界也会带来诸多问题. void main() { ; int *p = #//这根本无界可言 ...
- 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 ...
随机推荐
- 【freeCodeCamp】免费晋级前台工程师呦!!!!
首页地址:https://www.freecodecamp.org/ GitHub:https://github.com/freeCodeCamp/freeCodeCamp ============= ...
- Fresco的使用及注意事项
Fresco的使用及注意事项 时间 2016-10-17 18:32:12 DevWiki's Blog 原文 http://blog.devwiki.net/index.php/2016/10/1 ...
- selinue引起的ssh连接错误
在客户端执行ssh依然报错: Permission denied (publickey,gssapi-keyex,gssapi-with-mic). 在这个页面不小心看到了原因: http://ser ...
- spark-submit提交方式测试Demo
写一个小小的Demo测试一下Spark提交程序的流程 Maven的pom文件 <properties> <maven.compiler.source>1.7</maven ...
- MySQL binlog-do-db选项是危险的[转]
很多人通过 binlog-do-db, binlog-ignore-db, replicate-do-db 和 replicate-ignore-db 来过滤复制(某些数据库), 尽管有些使用, ...
- C# 字节数组拼接的速度实验(Array.copy(),Buffer.BlockCopy(),Contact())
无聊做了如题的一个算法的优劣性能比较,由于很多人都只关心结果,那么我先贴出结果如下: 由于我的测试数据量比较小,只能得出Array.Copy()和Buffer.BlockCopy()方法性能要好于Co ...
- mysql 让一个存储过程定时作业的代码(转)
1.在mysql 中建立一个数据库 test1 语句:create database test1 2.创建表examinfo create table examinfo( id int auto_in ...
- 栈(C++)
简介: 限定仅在表尾进行插入或删除操作的线性表 表尾端称为栈顶(top),表头端称为栈底(bottom) 特点: 在栈中,后入栈的元素先出栈 C语言版本 用于测试的文件,以及测试结果可以去作者GitH ...
- Fragment小结
Fragment是Android3.0之后增加的新特性,通常人们叫它碎片.可是,我认为把它理解成一个View模块比較好,尽管它不是继承自View.假设阅读过源代码就知道它是内置View对象从而实现Vi ...
- (webstorm的css编写插件)Emmet:HTML/CSS代码快速编写神器
Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来生成代码,大大提高了HTML/CSS代码编写的速度,比如下面的演示: ...