c语言怎么读取多级指针,C语言 详解多级指针与指针类型的关系

//V推论①:指针变量的步长只与‘指针变量的值’的类型有关(指针的值的类型 == 指针指向数据的类型)

//指针类型跟指针的值有关,指针是占据4个字节大小的内存空间,但是指针的类型却是各不相同的

//指针的类型决定了指针指向的内存空间从哪个位置开始,从哪个位置结束

//普通变量名是一段内存空间的标识,普通变量名代表的是一段内存空间,

//对于复杂变量(例如指针):要知道某个指针的步长,必须确定指针的类型

//指针的值永远是一个十六进制数字,但是这个十六进制数字指向的内存空间却是不相同的

//int a[5]; char *arr[4]={"aa","ss","dd","ee"};对于这2个一维数组而言

//a是一个指针,a指针的值是a[0]这个int型变量的地址,所以a的类型是int *;

//arr是一个指针,arr指针的值是arr[0]这个char *型变量的地址,所以arr的类型是char **

//有人会想a的类型是int *,那么a的步长应该是sizeof(int *) 是4;其实不对,a的步长应该是a指向的内存空间的大小

//a指向的内存空间是int型的变量a[0],a[0]的大小是4个字节,因此a的步长是sizeof(int) 是4 虽然都是4 但是意义不一样

//再来讨论arr,由以上推论可得,arr的步长应该是arr指向内存空间的大小,arr指向内存空间是一个字符串的指针,

//字符串的指针的大小是 sizeof(char *) = 4 个字节,所以arr的步长是4个字节

//举例int a[5]={0},讨论a和&a的步长

//a指向的是一个int型变量(上面已经详述),a的步长是sizeof(int) = 4;

//&a这指针指向的是一个int型的一维数组,这个int型的一维数组的大小是sizeof(int)*5 = 20;

//所以&a的步长是20

//V推论②:多级指针是人为为‘指针本身’做的一种区分

//二级指针是指针本身类型的一种人为自定类别,但通常意义上指针的类型没有任何关系

//一级指针与二级指针的区别在于,一级指针的值是某种类型的数据的地址,而二级指针的值是一个指针的地址

//指针的步长只跟指针的类型有关系,跟指针是几级指针没关系

#include

#include

void main(){

int a[] = { , , , , };

printf("%x\n", &a); // 打印 76fc54

printf("%x\n", &a + ); // 打印 76fc68 得出结论:&a的步长是20(特别提醒:这是十六进制)

printf("\n-----------------\n");

char *myarr[] = {"aaaaa","bb","c","dede"};

printf("%x\n", myarr); // 打印 81fe88

printf("%x\n", myarr + ); // 打印 81fe8c 得出结论:myarr的步长是4

system("pause");

}

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

一直想学习 Markdown 语言,想起以前读的一篇 赵凯强 的 博客 ,该篇博主 使用的是Mac系统, ...

详解C++11智能指针

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

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

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

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

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

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

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

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

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

邻接表无向图(一)之 C语言详解

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

随机推荐

Redis: OOM command not allowed when used memory > ‘maxmemory’

现象 日志里出现异常: OOM command not allowed when used memory > 'maxmemory' 原因 内存已满,不允许再存数据了,可以通过redis-cli ...

初次学习shader

Shader "Custom/Diffuse Texture" { //在shader中的位置 Properties { //着色器的属性 _MainTex ("Base ...

[Android Tips] 1. Getting StatusBar Height

public int getStatusBarHeight() { int result = 0; int resourceId = getResources().getIdentifier(&quo ...

Safari中的new Date()格式化坑

今天在测试的时候发现,在Chrome中的如下代码: new Date("2014-03-09"); 在Safari中报错invalid date.经过查阅资料找到类似的问答: st ...

HTML5 全屏特性

全屏功能是浏览器很早就支持的一项功能了,可以让你页面中的video, image ,div 等等子元素实现全屏浏览,从而带来更好的视觉体验,来看看怎么使用吧.先来看看有哪些API和事件支持. API ...

the server responded with a status of 404 (Not Found)

1.出现这种问题,第一时间检查文件路径是否正确,相对路径或者绝对路径是否正确 2.某些后缀的文件是否能够找到,我现在碰到的就是.md文件找不到,需要配置web.config

Java中的Stringbuffer类解析

StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存 ...

js导出成excel

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值