1. //V推论①:指针变量的步长只与‘指针变量的值’的类型有关(指针的值的类型 == 指针指向数据的类型)
  2.  
  3. //指针类型跟指针的值有关,指针是占据4个字节大小的内存空间,但是指针的类型却是各不相同的
  4. //指针的类型决定了指针指向的内存空间从哪个位置开始,从哪个位置结束
  5.  
  6. //普通变量名是一段内存空间的标识,普通变量名代表的是一段内存空间,
  7. //对于复杂变量(例如指针):要知道某个指针的步长,必须确定指针的类型
  8. //指针的值永远是一个十六进制数字,但是这个十六进制数字指向的内存空间却是不相同的
  9.  
  10. //int a[5]; char *arr[4]={"aa","ss","dd","ee"};对于这2个一维数组而言
  11. //a是一个指针,a指针的值是a[0]这个int型变量的地址,所以a的类型是int *;
  12. //arr是一个指针,arr指针的值是arr[0]这个char *型变量的地址,所以arr的类型是char **
  13. //有人会想a的类型是int *,那么a的步长应该是sizeof(int *) 是4;其实不对,a的步长应该是a指向的内存空间的大小
  14. //a指向的内存空间是int型的变量a[0],a[0]的大小是4个字节,因此a的步长是sizeof(int) 是4 虽然都是4 但是意义不一样
  15. //再来讨论arr,由以上推论可得,arr的步长应该是arr指向内存空间的大小,arr指向内存空间是一个字符串的指针,
  16. //字符串的指针的大小是 sizeof(char *) = 4 个字节,所以arr的步长是4个字节
  17.  
  18. //举例int a[5]={0},讨论a和&a的步长
  19. //a指向的是一个int型变量(上面已经详述),a的步长是sizeof(int) = 4;
  20. //&a这指针指向的是一个int型的一维数组,这个int型的一维数组的大小是sizeof(int)*5 = 20;
  21. //所以&a的步长是20
  22.  
  23. //V推论②:多级指针是人为为‘指针本身’做的一种区分
  24.  
  25. //二级指针是指针本身类型的一种人为自定类别,但通常意义上指针的类型没有任何关系
  26. //一级指针与二级指针的区别在于,一级指针的值是某种类型的数据的地址,而二级指针的值是一个指针的地址
  27. //指针的步长只跟指针的类型有关系,跟指针是几级指针没关系
  28.  
  29. #include<stdio.h>
  30. #include<stdlib.h>
  31.  
  32. void main(){
  33. int a[] = { , , , , };
  34. printf("%x\n", &a); // 打印 76fc54
  35. printf("%x\n", &a + ); // 打印 76fc68 得出结论:&a的步长是20(特别提醒:这是十六进制)
  36. printf("\n-----------------\n");
  37. char *myarr[] = {"aaaaa","bb","c","dede"};
  38. printf("%x\n", myarr); // 打印 81fe88
  39. printf("%x\n", myarr + ); // 打印 81fe8c 得出结论:myarr的步长是4
  40. system("pause");
  41. }

C语言 详解多级指针与指针类型的关系的更多相关文章

  1. 大牛针对零基础入门c语言详解指针(超详细)

    C语言指针说难不难但是说容易又是最容易出错的地方,因此不管是你要做什么只要用到C指针你就跳不过,今天咱们就以 十九个例子来给大家简单的分析一下指针的应用,最后会有C语言视频资料提供给大家更加深入的参考 ...

  2. 原来Github上的README.md文件这么有意思——Markdown语言详解(sublime text2 版本)

    一直想学习 Markdown 语言,想起以前读的一篇 赵凯强 的 博客 <原来Github上的README.md文件这么有意思——Markdown语言详解>,该篇博主 使用的是Mac系统, ...

  3. 详解 boost 库智能指针(scoped_ptr<T> 、shared_ptr<T> 、weak_ptr<T> 源码分析)

    一.boost 智能指针 智能指针是利用RAII(Resource Acquisition Is Initialization:资源获取即初始化)来管理资源.关于RAII的讨论可以参考前面的文章.在使 ...

  4. 详解C++11智能指针

    前言 C++里面的四个智能指针: auto_ptr, unique_ptr,shared_ptr, weak_ptr 其中后三个是C++11支持,并且第一个已经被C++11弃用. C++11智能指针介 ...

  5. Java Web----EL(表达式语言)详解

     Java Web中的EL(表达式语言)详解 表达式语言(Expression Language)简称EL,它是JSP2.0中引入的一个新内容.通过EL可以简化在JSP开发中对对象的引用,从而规范页面 ...

  6. 详解C/C++函数指针声明 ( *( void(*)())0)();

     ( *( void(*)())0)(); float *pf; 这个声明的含义是*pf是一个浮点数,也就是说,pf是一个指向浮点数的指针. float *g() , (*h)(); 表示*g()与( ...

  7. 详解C/C++函数指针声明

    要理解一个C程序,仅仅理解组成该程序的符号是不够的.程序员还必须理解这些符号是如何组合成声明.表达式.语句和程序的. 我们先来看看下面的一个语句: 1 ( *( void(*)())0)(); 这是当 ...

  8. 拓扑排序(一)之 C语言详解

    本章介绍图的拓扑排序.和以往一样,本文会先对拓扑排序的理论知识进行介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现. 目录 1. 拓扑排序介绍 2. 拓扑排序的算法图解 3. 拓扑 ...

  9. 邻接表有向图(一)之 C语言详解

    本章介绍邻接表有向图.在"图的理论基础"中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了.和以往一样,本文会先给出C语言的实现:后续再分别给出C++和Java版本的实现 ...

随机推荐

  1. android XMl 解析神奇xstream 二: 把对象转换成xml

    前言:对xstream不理解的请看:android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 1.Javabeen 代码 packa ...

  2. Android项目实战(六):JazzyGridView和JazzyListView的使用

    GridView和ListView控件划动的动画效果 ------------------------------------------------------------------------- ...

  3. 【原】开发路上疑难BUG调试记录

    之前遇到棘手的BUG总是在处理过后就不管了,导致后面碰到相同问题后重复工作太多.现专门开辟一篇日志以记录接下来一路上比较棘手的“坑”的修复历程: [C++篇] 1.mt.exe : general e ...

  4. iOS网络检测Reachability 使用 Demo,可检测2、3、4G

    你可以在Github下载这个Demo https://github.com/JanzTam/Reachability_Demo 首先,引入系统的Reachability类,不知道怎么引入的话,在Xco ...

  5. iOS之github第三方框架(持续更新)

    1.MBProgressHUD MBProgressHUD是一个开源项目,实现了很多种样式的提示框 使用上简单.方便,并且可以对显示的内容进行自定义,功能很强大,很多项目中都有使用到. 到Github ...

  6. MySQL学习总结(摘抄)

    1.数据库概述 简 而言之,数据库(DataBase)就是一个存储数据的仓库.为了方便数据的存储和管理,将数据按照特定的规律存储在磁盘上.通过数据库管理系统,可以有 效的组织和管理存储在数据库中的数据 ...

  7. 敏捷软件开发(3)---COMMAND 模式 & Active Object 模式

    COMMAND 模式 command模式非常简单,简单到你无法想象的地方. public interface Command { void execute(); } 这就是一个command模式的样子 ...

  8. 重要选择器querySelector和querySelectorAll

    他们的作用是根据 CSS 选择器规范,便捷定位文档中指定元素. 目前几乎主流浏览器均支持了他们.包括 IE8(含) 以上版本. Firefox. Chrome.Safari.Opera. queryS ...

  9. 使用Ant构建struts2 web工程,自动编译,打包成war

    c&c++语言通常使用make脚本来构建和管理自己的工程,同样java也有自己的构建工具(Ant),使用时需要写一个biuld.xml,有点类似c&c++里的makefile. 一.首 ...

  10. JSON 格式介绍

    转自:http://www.json.org/json-zh.html JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器 ...