C语言的指针移动怎么理解
C Primer pkus(第五版)中文版,老外写的还是很经典的,推荐给朋友们,购买地址:C primer plus 5版中文版购买
另外再推荐本书:
程序员面试宝典(第5版)第五版:程序员面试宝典(第5版)第五版
刚学习C语言的朋友,对指针“移动”可能不太理解。举个例子,例如下述代码:
int a = 1;
那么大家都知道a + 1肯定就是2了。如果是指针呢?例如:
int *p = 1;
p + 1还是2吗?
为了说明问题,请看以下代码:
#include "stdio.h"
#include "stdlib.h"int main()
{int index = 0;int number[3] = {1, 2, 3}; //定义一个整型数组int *p = &number[0]; //指针p的初始值是数组第一个元素的地址printf("p的值是 %x\n", p); //输出p的值,也就是数组第一个元素的地址printf("本机int类型占用 %d 个字节\n", sizeof(int)); //得知本机上int类型占用多少字节for(index = 0; index < 3; index++){printf("第 %d 个元素的地址是 %x\n", index + 1, &number[index]);}//输出数组中每一个元素的地址for(index = 0; index < 3; index++){printf("p加 %d 的值是 %x\n", index, p + index);}//输出指针p+1, p+2, p+3的值return 0;
}
程序很简单,目的就是为了说明指针p自己加上1、2、3分别得到什么值。运行结果如下:
指针p的初始值就是数组第一个元素的地址,为“12ff70”。那么从p + 1开始,并不是简单的12ff70 + 1 = 12ff71,而是12ff70 + 4 = 12ff74。p + 2也不是12ff70 + 2 = 12ff72,而是12ff70 + 4 + 4 =12ff78。所以指针的增加运算与本文开头的整型变量a的增加运算还不一样,这也是许多初学者经常会糊涂的一个地方。
指针p +n其实计算的是p加上n*类型占用字节数。本文指针p是int类型,本机中,使用sizeof计算出的int占用的字节数是4。因此,p + 1其实就是p + 1 * 4个字节,p + 2其实就是p + 2 * 4个字节。关于每种类型在本机上占用的字节数网上有很多介绍,读者可以自行搜索下。
可能也有的朋友说,这个我懂啊,p + 1其实就是往前移动了4个字节啊!但是太自大也不好,太自大的结果就是你心里知道p + 1是跨越了4个字节的地址,但是手一抖,写成了p + 4,你说这是笔误呢还是笔误呢?
C语言的指针移动怎么理解相关推荐
- C语言之指针的再次理解
C语言指针的一些理解 一 ...
- c语言两个指针相等,C语言之指针,便于理解
一.指针变量定义 C语言有两种变量: 其中变量(普通变量)存储内容值:地址变量(指针变量)存储地址值. 1.定义的格式: 类型名 *指针变量名: 如: int a,b,*p1,*p2: float x ...
- c语言中*用于指针,关于C语言中指针的理解
关于c语言中指针的一些理解 这几天在看任哲老师编写的嵌入式实时操作系统uC/OS原理与应用一书,第二章讲到指针的用法,我发现自己有些地方有疑问,就重新看了关于c指针的知识.同时也对指针有了一定的理解. ...
- 理解C语言中指针的声明以及复杂声明的语法
昨天刚把<C程序设计语言>中"指针与数组"章节读完,终于把心中的疑惑彻底解开了.现在记录下我对指针声明的理解,顺便说下如何在C语言中创建复杂声明以及读懂复杂声明. 本文 ...
- C语言与Java怎么沟通_c语言初学指针,对于java面向对象的初理解
最近在看关于c语言的指针,学习下,发现指针原来运用理解成其实可以抽象出我们java的面向对象封装,地址--> 对象或变量,先看一段代码: public class Cat { public St ...
- c语言 指针 pdf,深入理解c指针 PDF扫描版[33MB]
深入理解C指针 内容简介: 深入理解C指针和内存管理,提升编程效率!这是一本实战型图书,通过它,读者可以掌握指针动态操控内存的机制.对数据结构的增强支持,以及访问硬件等技术.本书详细阐述了如何在数组. ...
- printf 指针地址_c语言对指针的理解
先来讲一下本人学指针的经历:大一的时候刚接触c语言对指针这东西真的是太迷了,感觉麻烦难懂不想其他语言一样.但是搞懂以后就被指针的魅力吸引甚至喜欢上c语言.不多讲,开始!(文章可能有些长,但放心全是基础 ...
- java c 面向对象比较教程_c语言初学指针,对于java面向对象的初理解
最近在看关于c语言的指针,学习下,发现指针原来运用理解成其实可以抽象出我们java的面向对象封装,地址--> 对象或变量,先看一段代码: public class Cat { public St ...
- 有关C语言指针的详细理解
在学习数据结构的过程中,在用到各种表的时候,经常离不开指针. 当初学习C语言的时候指针这块就理解的不够透彻,导致现在复习数据结构写相关代码还是用数组模拟来实现.如此一来,失去了真正学习数据结构的意义. ...
最新文章
- python学习之面向对象(三)
- chmod 是一条在Unix系统中用于控制用户对文件的权限的命令
- 数组洗牌 Fisher Yates
- 用户首次登录之前必须更改密码_技术丨带你玩转Win10系统的用户账户
- java默认数组值_数组元素默认的初始值都是什么
- 蓝桥杯基础练习十六进制转十进制
- bind_param 类怎么写_情感类自媒体怎么写?你不知道的情感类文章4大禁忌!
- 46muduo库使用示例(五)
- 设置MyEclipse编码、补全快捷键、字体大小
- 调色板 palette 详解
- mayafbx无法识别_maya怎么打开fbx文件
- 【华为机试真题 Python实现】统计射击比赛成绩
- 围绕开源的系列思考之二——企业篇
- mybatis-plus(五)-----中文文档
- 好用的Chrome插件大全网站:插件小屋
- 消防工程师 6 干粉灭火系统 7.1 泡沫灭火系统-组件
- 【解决思路】Spring Boot:Error creating bean with name ‘xxxDao‘
- 错误记录----javac错误:javac不是内部或外部命令 也不是可运行的程序
- 小学生机器人编程是学的什么
- 各种开发架构技术图谱