美文网首页
C/C++指针运算理解

C/C++指针运算理解

作者: Bejamin | 来源:发表于2018-03-23 14:37 被阅读8次

首先看一个例子。


首先确认一点:a的类型为5个元素的int数组,其类型可以看作是int[5],虽然不存在这种类型,但是这么理解是没有问题的。

C/C++中指针和数字的运算是将指针按照其类型大小进行前后移动相应个数的字节数。如int类型大小(sizeof值)为4,char为1。 比如,int p; char q; p+1;就是将p的值(内存地址)加4(int类型的字节数),q+1则是将q的值加1(char类型的字节数)。

所以,题目中 &a+1 的意思就是将a的地址加上5个int的字节数,因为a的类型为int[5],然后将结果强制类型转换为 int *后赋值给p。

可是,a的地址又是什么呢? a的类型为int[5],所以,a的地址是指向了5个int类型元素的首地址,它的sizeof值是4*5=20,所以 &a+1 就是数组a最后一个元素后面的20个字节的首地址。

强制类型转换后,变成数组后面一个int空间的首地址。 所以,最后p-1就是数组最后一个int空间的首地址,*(p-1)就是数组最后一个元素了。

总之,类型只是标记内存读写的方式,或者说是内存分配的方式。而指针作为一种可以与内存地址等价的存在,其算术运算必须要结合类型的sizeof值。

所以,本题应该选择什么呢?

相关文章

  • C/C++指针运算理解

    首先看一个例子。 首先确认一点:a的类型为5个元素的int数组,其类型可以看作是int[5],虽然不存在这种类型,...

  • Go语言 值,指针,引用类型

    Go语言的指针与C或C++的指针类似,但是Go语言的指针不支持指针运算,这样就消除了在C或C++程序中一些潜在的问...

  • java

    1.java白皮书的关键术语 简单的参照c++,是c++语法的纯净版本但没有c++中的头文件,指针运算(甚至指针语...

  • 学习笔记3(指针运算,函数参数与指针,数组指针,二级指针)

    一、指针运算 二、数组与指针 三、指针和函数参数 java中: C/C++中: 四、指针数组 五、 二级指针 六、...

  • 1.2.09_C++ 指向类的指针

    C++ 类 & 对象 一个指向 C++ 类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成员访问运算...

  • 计算机基础的考察

    语言语法(以C/C++为例)。 指针(数组),函数指针,操作符运算顺序,const(常指针与指向常量指针),sta...

  • golang使用unsafe包实现指针运算操作private变量

    golang中是有指针概念的,但是go中的指针功能被限制了,不像C/C++中那样,可以对指针进行运算 比如在C/C...

  • C++知识点

    C++基本方法: C++ memcpy C++基本特性: C++引用(vs指针) C++指针 C++封装: 将...

  • C++总结之运算符重载

    在C++中,只有四种运算符不可以被重载,他们是: 条件运算符"? :";例如a=b>c?b:c 指针分量运算符 ...

  • C++ this指针的理解和作用

    01 C++ 程序到 C 程序的翻译 要想理解 C++ 的 this 指针,我们先把下面的 C++ 代码转换成 C...

网友评论

      本文标题:C/C++指针运算理解

      本文链接:https://www.haomeiwen.com/subject/gvhxcftx.html