`
guoyiqi
  • 浏览: 1042639 次
社区版块
存档分类
最新评论

(1)让你不再害怕指针--细说指针

 
阅读更多

指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。让我们分别说明。

先声明几个指针放着做例子:

例一:

(1)int*ptr;

(2)char*ptr;

(3)int**ptr;

(4)int(*ptr)[3];

(5)int*(*ptr)[4];

1.指针的类型

从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各个指针的类型:

(1)int*ptr;//指针的类型是int*

(2)char*ptr;//指针的类型是char*

(3)int**ptr;//指针的类型是int**

(4)int(*ptr)[3];//指针的类型是int(*)[3]

(5)int*(*ptr)[4];//指针的类型是int*(*)[4]

怎么样?找出指针的类型的方法是不是很简单?

2.指针所指向的类型

当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。

从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。例如:

(1)int*ptr; //指针所指向的类型是int

(2)char*ptr; //指针所指向的的类型是char

(3)int**ptr; //指针所指向的的类型是int*

(4)int(*ptr)[3]; //指针所指向的的类型是int()[3]

(5)int*(*ptr)[4]; //指针所指向的的类型是int*()[4]

在指针的算术运算中,指针所指向的类型有很大的作用。

指针的类型(即指针本身的类型)和指针所指向的类型是两个概念。当你对C 越来越熟悉时,你会发现,把与指针搅和在一起的"类型"这个概念分成"指针的类型"和"指针所指向的类型"两个概念,是精通指针的关键点之一。我看了不少书,发现有些写得差的书中,就把指针的这两个概念搅在一起了,所以看起书来前后矛盾,越看越糊涂。

3.指针的值----或者叫指针所指向的内存区或地址

指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在32 位程序里,所有类型的指针的值都是一个32 位整数,因为32 位程序里内存地址全都是32 位长。指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为si zeof(指针所指向的类型)的一片内存区。以后,我们说一个指针的值是XX,就相当于说该指针指向了以XX 为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。

指针所指向的内存区和指针所指向的类型是两个完全不同的概念。在例一中,指针所指向的类型已经有了,但由于指针还未初始化,所以它所指向的内存区是不存在的,或者说是无意义的。

以后,每遇到一个指针,都应该问问:这个指针的类型是什么?指针指的类型是什么?该指针指向了哪里?(重点注意)

4 指针本身所占据的内存区

指针本身占了多大的内存?你只要用函数sizeof(指针的类型)测一下就知道了。在32 位平台里,指针本身占据了4 个字节的长度。

指针本身占据的内存这个概念在判断一个指针表达式(后面会解释)是否是左值时很有用。

请继续学习 2.让你不再害怕指针--指针的算术运算

分享到:
评论

相关推荐

    让你不再害怕指针(c中指针的详解)

    #### 细说指针 指针是一种特殊的数据类型,用于存储内存地址。理解指针需要掌握四个关键方面: 1. **指针的类型**:指针的类型是指针本身具有的类型。可以通过去除指针名称和其左侧的指针声明符`*`来确定。例如: ...

    指针经验总结-让你不再害怕指针

    1、细说指针 要了解指针,多多少少会出现一些比较复杂的类型,如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以从...

    让你不再害怕指针

    ### 让你不再害怕指针 #### 前言:复杂类型说明 为了更好地理解和运用指针,我们首先需要掌握如何解析复杂的类型定义。在C语言等编程语言中,复杂类型的解析至关重要,尤其是在处理指针时。理解这些类型有助于我们...

    C++指针应用教学:让你不再害怕指针

    ### C++指针应用教学:让你不再害怕指针 #### 前言:复杂类型说明 在编程领域,特别是对于C++这样的强类型语言而言,理解指针的概念及其使用方式至关重要。指针作为C++中一种特殊的变量类型,能够直接操作内存地址...

    让你不再害怕指针,学习指针必看

    #### 二、细说指针 #### 1. 指针的类型 指针的类型指的是指针本身的类型,可以通过去除指针名称来获取。例如: - `int *ptr;`:指针的类型为`int *`。 - `char *ptr;`:指针的类型为`char *`。 - `int **ptr;`:...

    c/c++指针总结··让你不再害怕指针

    ### C/C++ 指针总结 —— 让你不再害怕指针 #### 前言:复杂类型说明 为了更好地理解和使用C/C++中的指针,本篇内容将逐步介绍如何解读各种复杂的指针类型,并通过实际示例加深理解。在开始之前,我们需要明白一点...

    让你不再怕指针pdf

    ### 让你不再怕指针PDF —— C/C++指针概念及用法详解 #### 前言:复杂类型解析 在深入了解C/C++中的指针之前,我们需要掌握一些基本概念,特别是如何理解复杂的类型定义。这不仅有助于更好地理解和使用指针,还能...

    细说指针.docx

    ### 细说指针 #### 引言 指针是编程语言中一种非常重要的概念,尤其是在C/C++等低级语言中,掌握好指针能够极大地提高程序的灵活性和效率。本文将详细介绍指针的基本概念及其类型解析方法,并通过具体的示例帮助...

    让你不再害怕指针.zip

    "让你不再害怕指针.zip"这个压缩包文件显然旨在帮助初学者理解和掌握这一关键概念。 首先,我们要理解“细说指针”。指针本质上是一个变量,但它存储的不是普通的值,而是其他变量的内存地址。在C语言中,每个变量...

    非常经典详细的指针用法总结

    #### 三、细说指针 指针是一种特殊的数据类型,它用来存储其他数据的内存地址。要全面理解一个指针,需要从四个方面着手: 1. **指针的类型**:指针本身的类型,即指针声明语句中除变量名以外的部分。 - 示例:`...

    指针复杂类型说明

    #### 细说指针 指针是一种特殊的变量,它存储的数值被解释为内存中的地址。理解指针需要明确以下几个方面: 1. **指针的类型**:指针的类型描述了指针本身的数据类型。可以通过删除指针声明中的指针名称来确定其...

    指针精通指针精通指针精通

    #### 细说指针 指针是一种特殊类型的变量,它存储的是内存地址。为了全面理解一个指针,我们需要从以下几个方面入手: 1. **指针的类型**:指针本身的类型,即它所指向的数据类型。可以通过移除指针名称及其左侧的...

    C++ 指针指南(绝好)

    #### 细说指针 指针是一种特殊的数据类型,在C++中扮演着非常重要的角色。要充分理解一个指针,我们需要从四个方面来把握: 1. **指针的类型** 2. **指针所指向的类型** 3. **指针的值(或指针所指向的内存区域)*...

    C_C++指针经验总结.pdf

    #### 细说指针 接下来,我们将进一步讨论指针的组成部分,以便更好地理解它们的工作原理。 1. **指针的类型** 指针本身的类型指的是指针自身所属的数据类型。例如,在`int *ptr;`中,`ptr`的类型是`int *`。具体...

    戏说指针 作者 李志勇 是word文档

    二、细说指针 1. 指针的类型:指针本身具有类型,例如`int*`、`char*`等,它们表示指针可以指向的数据类型。 2. 指针所指向的类型:指针变量存储的是某个变量的地址,这个地址所对应的变量类型就是指针所指向的类型...

    C_C++指针经验总结

    ### 细说指针 #### 1. 指针的类型 指针的类型指的是指针本身的类型。可以通过去除指针声明中的指针名称及其前面的星号(`*`)来获取指针的类型。例如: - `int *ptr;`:指针的类型是`int *`。 - `char *ptr;`:指针...

    C语言指针用法详解

    细说指针 接下来,我们将通过具体的示例来进一步解释指针的概念。 ##### 指针的类型 - **指针类型**:从语法角度来看,去掉指针声明语句中的指针名称后剩余的部分就是指针的类型。 - `int *ptr;`:指针类型为`...

Global site tag (gtag.js) - Google Analytics