专栏首页HeaiKun指针与数组(1)

指针与数组(1)

C语言中指针算是核心了吧,掌握了指针基本上就掌握的了C语言的精髓,不过要想真正掌握指针,还是需要仔细认真的钻研一番的。这里我就浅谈一下我对指针的理解吧。以下是我的个人理解,有不同见解的欢迎和我一起探讨。

什么是指针?

在说指针之前先说一下什么是地址吧。我们可以把计算机的内存比作蜜蜂的巢,由一个一个的小格子构成,内存中的小格子都是按顺序进行编号的,这些编号就是我们说的地址了。每一个小格子都可以存放一个字节(byte)大小的数据,包含8个位(bit)。指针呢,简单的说就是一个地址。

大家都知道指针变量就是存放地址的变量。这句话说的很对,但是太表面了。我们思考一个问题“如果指针仅仅是存放地址的变量,那么为什么指针变量还要有类型?”我的理解是指针是存放一定大小空间的首地址的变量。一个指针变量不仅存了一个地址还定义了这指针指向空间的大小。

指针和数组

说到指针和数组,可以说这两个概念之间的关系密不可分,如果你不能理解其中一个概念,也就不能理解另一个概念。

举个栗子

我们有一个数组 :int arr[5] = {0,1,2,3,4}; 然后我们获取中间的元素arr[2]的值时有两种操作方式。

  1. arr[2];
  2. *(arr+2)

那么对于二维数组的话两两组合就有四种操作方式了。

对于数组需要注意两点

  1. C语言中只有一维数组,而且数组大小必须在编译的时候就确定一个准确的值,数组中的元素可以是任何类型。所以二维数组等多维数组就是数组的嵌套构成的。
  2. 对于一个数组,我们仅仅能做的就是确定数组的大小,获得指向数组下标为零的地址

其余的操作都是以指针的形式来进行操作,而这些操作就要用到指针的运算了,下面我们讨论重点内容:指针运算。

指针的运算

指针的运算包括指针与常数的加减,数组内的指针之间的减运算等。

指针与常数的加减:这个要注意指针的类型,指针变量加1,指针所指向的地址就增加一个类型的大小。如:一个int型指针p,p+1就是p指向的地址往后移动一个int型的大小,也就是4个字节。如果p指向的地址是0x00,那么p+1指向的地址就是0x04。同样,如果类型是是一个结构体,那么也是往后移动一个结构体的大小。

指针与指针的减:这样的操作一般是在数组,结构体等具有连续地址的空间里面进行运算的。假如有int arr[10];那么arr[5] - arr[3] 就等于2,意思就是相差两个int 空间的大小,当然,两个指针相加没有任何意义,就如同两个不相干的指针相减一样。

本文分享自微信公众号 - HeaiKun(hhk-develop),作者:heaikun

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-08-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C/C++ 基本类型注意事项

    本文只会介绍C++ 学习时的一些细节,不会详细介绍C++的基础知识,如有需要学习基础知识的,请直接阅读《C++ Primer》一书。

    HeaiKun
  • shell---入门(最基础的几个命令)

    作为一个程序开发者,无论你是前端开发也好,后台开发也罢。都避免不了使用Linux操作系统,那就更避免不了使用终端命令,其实也就是shell命令。今天就总结一下使...

    HeaiKun
  • 关于数组名的使用

    你会发现使用printf将这两个指针打印出来后,两者的值是一样的,那么他们俩到底有什么区别呢?

    HeaiKun
  • 全国二级C知识点总结4-指针

    printf(“%d,%d,%d,%d\n”,m,n,*p,*q) ;

    用户6755376
  • C - 指针C语言指针的总结

    xx_Cc
  • (多图预警)7个例子,7个视频,一堆图片助你把双指针按的牢牢的

    大家好,我是袁厨。就是那个酷爱做饭自己考取了厨师资格证的程序员,文章中喜欢放动图的袁厨。

    公众号袁厨的算法小屋
  • 总结了一些指针易出错的常见问题(六)

      安全问题与指针误用 声明和初始化指针(初始化失败) 误用指针 释放问题 指针声明: // 宏定义(仅仅是替换) #define PINT int*; PIN...

    互联网金融打杂
  • 【编程基础】C语言指针函数和函数指针

    往往,我们一提到指针函数和函数指针的时候,就有很多人弄不懂。下面详细为大家介绍C语言中指针函数和函数指针。 一、指针函数 当一个函数声明其返回值为一个指针时,实...

    程序员互动联盟
  • 142. Linked List Cycle II

    首先要证明链表有环: 用快慢两个指针解决。快指针每次走两步,慢指针每次走一步。如果有环,则一定会最终在环内某点相遇。下面证明这一点:

    平凡的学生族
  • 8.5 指针小结

    1、一个函数可以返回一个整型值、字符值、实型值等,也可以返回指针型的数据,即地址,其概念与以前类似,只是返回的值的类型是指针类型。

    C语言入门到精通

扫码关注云+社区

领取腾讯云代金券