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语言的指针移动怎么理解相关推荐

  1. C语言之指针的再次理解

                                                                                            C语言指针的一些理解 一 ...

  2. c语言两个指针相等,C语言之指针,便于理解

    一.指针变量定义 C语言有两种变量: 其中变量(普通变量)存储内容值:地址变量(指针变量)存储地址值. 1.定义的格式: 类型名 *指针变量名: 如: int a,b,*p1,*p2: float x ...

  3. c语言中*用于指针,关于C语言中指针的理解

    关于c语言中指针的一些理解 这几天在看任哲老师编写的嵌入式实时操作系统uC/OS原理与应用一书,第二章讲到指针的用法,我发现自己有些地方有疑问,就重新看了关于c指针的知识.同时也对指针有了一定的理解. ...

  4. 理解C语言中指针的声明以及复杂声明的语法

    昨天刚把<C程序设计语言>中"指针与数组"章节读完,终于把心中的疑惑彻底解开了.现在记录下我对指针声明的理解,顺便说下如何在C语言中创建复杂声明以及读懂复杂声明. 本文 ...

  5. C语言与Java怎么沟通_c语言初学指针,对于java面向对象的初理解

    最近在看关于c语言的指针,学习下,发现指针原来运用理解成其实可以抽象出我们java的面向对象封装,地址--> 对象或变量,先看一段代码: public class Cat { public St ...

  6. c语言 指针 pdf,深入理解c指针 PDF扫描版[33MB]

    深入理解C指针 内容简介: 深入理解C指针和内存管理,提升编程效率!这是一本实战型图书,通过它,读者可以掌握指针动态操控内存的机制.对数据结构的增强支持,以及访问硬件等技术.本书详细阐述了如何在数组. ...

  7. printf 指针地址_c语言对指针的理解

    先来讲一下本人学指针的经历:大一的时候刚接触c语言对指针这东西真的是太迷了,感觉麻烦难懂不想其他语言一样.但是搞懂以后就被指针的魅力吸引甚至喜欢上c语言.不多讲,开始!(文章可能有些长,但放心全是基础 ...

  8. java c 面向对象比较教程_c语言初学指针,对于java面向对象的初理解

    最近在看关于c语言的指针,学习下,发现指针原来运用理解成其实可以抽象出我们java的面向对象封装,地址--> 对象或变量,先看一段代码: public class Cat { public St ...

  9. 有关C语言指针的详细理解

    在学习数据结构的过程中,在用到各种表的时候,经常离不开指针. 当初学习C语言的时候指针这块就理解的不够透彻,导致现在复习数据结构写相关代码还是用数组模拟来实现.如此一来,失去了真正学习数据结构的意义. ...

最新文章

  1. python学习之面向对象(三)
  2. chmod 是一条在Unix系统中用于控制用户对文件的权限的命令
  3. 数组洗牌 Fisher Yates
  4. 用户首次登录之前必须更改密码_技术丨带你玩转Win10系统的用户账户
  5. java默认数组值_数组元素默认的初始值都是什么
  6. 蓝桥杯基础练习十六进制转十进制
  7. bind_param 类怎么写_情感类自媒体怎么写?你不知道的情感类文章4大禁忌!
  8. 46muduo库使用示例(五)
  9. 设置MyEclipse编码、补全快捷键、字体大小
  10. 调色板 palette 详解
  11. mayafbx无法识别_maya怎么打开fbx文件
  12. 【华为机试真题 Python实现】统计射击比赛成绩
  13. 围绕开源的系列思考之二——企业篇
  14. mybatis-plus(五)-----中文文档
  15. 好用的Chrome插件大全网站:插件小屋
  16. 消防工程师 6 干粉灭火系统 7.1 泡沫灭火系统-组件
  17. 【解决思路】Spring Boot:Error creating bean with name ‘xxxDao‘
  18. 错误记录----javac错误:javac不是内部或外部命令 也不是可运行的程序
  19. 小学生机器人编程是学的什么
  20. 各种开发架构技术图谱

热门文章

  1. 论文算法学习实现(5):动态障碍物的检测和剔除2
  2. js处理鼠标及滚动条事件
  3. 关于OWASP Top 10 2021的整理
  4. 计算机毕业设计SSM毕业生导师双选系统【附源码数据库】
  5. 《深度学习进阶 自然语言处理》第五章:RNN通俗介绍
  6. Spring Cloud Alibaba搭建(二):Nacos注册中心
  7. windows制作proxmox pve U盘镜像
  8. android setBackground
  9. 聊聊我的金钱观,和你不一样!
  10. xp系统怎么启动任务计划服务器,windowsXP操作系统如何设置计划任务