`
canofy
  • 浏览: 831335 次
  • 性别: Icon_minigender_1
  • 来自: 北京、四川
社区版块
存档分类
最新评论

谈C/C++指针精髓(一)

阅读更多
转载:http://www.cnblogs.com/madengwei/archive/2008/02/18/1072410.html
[摘要]



指针是C和C++语言编程中最重要的概念之一,也是最容易产生困惑并导致程序出错的问题之一。利用指针编程可以表示各种数据结构, 通过指针可使用主调函数和被调函数之间共享变量或数据结构,便于实现双向数据通讯;并能像汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C和C++语言的功能。

在本文中,主要分两部分对指针进行讨论。首先,基础篇讨论关于指针的内容和运算操作等,可以是读者对指针的知识有一定了解和认识;随后在使用篇中重点讨论指针的各种应用,揭破指针在日常编程中的精髓,从而使读者能够真正地了解、认识和使用指针。

[关键字] C C++ 指针 引用 数组 结构体 类

第一篇:基础篇

1.1指针的概念



谈到指针,它的灵活性和难控制性让许多程序员谈虎色变;但它的直接操作内存,在数据

操作方面有着速度快,节约内存等优点,又使许多C++程序员的深爱不以.那么指针究竟是怎么样一个概念呢?

其实, 指针就是一类变量,是一类包含了其他变量或函数的地址的变量。与其他变量所不同的是,一般的变量包含的是实际的真实的数据,而指针是一个指示器,它告诉程序在内存的哪块区域可以找到数据。

好了,在这里我们可以这样定义指针:指针是一类包含了其他变量或函数的地址的变量,它里面存储的数值被解释成为内存的地址.


1.2指针的内容



简单讲,指针有四个方面的内容:即指针的类型,指针所指向的类型,指针的值,指针本身所

占有的内存区.下面我们将分别阐述这些内容.

1.2.1指针的类型


从语法的角度看,指针的类型是指把指针声明语句中的指针名字去掉所剩下的部分。这是指针本身所具有的类型。例如:

int*ip;            //指针的类型是int*

char*ip;           //指针的类型是char*

int**ip;           //指针的类型是int**

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

1.2.2指针所指向的类型


当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么类型来看待。从语法的角度看,指针所指向的类型是指针声明语句中的指针名字和名字左边的指针声明符*去掉所剩下的部分。例如:

int*ip;            //指针所指向的类型是int

char*ip;           //指针所指向的类型是char

int**ip;           //指针所指向的类型是int*

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

1.2.3指针的值(或称指针所指向的内存区)

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

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

以后,每遇到一个指针,都应该问问:这个指针的类型是什么?指针指的类型是什么?该指针指向了哪里?
1.2.4指针本身所占有的内存区

指针本身所占有的内存区是指针本身占内存的大小,这个你只要用函数sizeof(指针的

类型)测一下就知道了。在32位平台里,指针本身占据了4个字节的长度。

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


分享到:
评论

相关推荐

    C/C++ 指针的13份资料

    通过深入学习这13份资料,你将能够掌握C/C++指针的精髓,无论是进行底层编程、优化算法,还是解决复杂的数据结构问题,指针都会成为你得力的工具。务必仔细研读,不断实践,指针虽小,其威力不容小觑。

    C/C++指针经验总结

    这篇"《C/C++指针经验总结》"教程旨在帮助你理解和掌握指针的使用,消除对指针的恐惧,通过丰富的实例来深入理解这一关键主题。 1. **指针的基本概念** - 指针是一个变量,它存储了一个内存地址,这个地址指向另一...

    从缺陷中学习C/c++

    1. **指针陷阱**:错误的指针操作是C/C++中最常见的问题之一。例如,野指针(指向已释放内存的指针)、空指针解引用、指针未初始化即使用等,都可能导致程序崩溃或不稳定。 2. **数组越界**:访问数组之外的内存...

    c/c++指针大突击

    在编程世界里,C/C++语言以其强大的底层控制能力闻名,而指针是其核心特性之一,也是理解和掌握这两门语言的关键。指针是C/C++中的“魔术师”,它能够直接操纵内存,使得程序员可以直接操作数据,实现高效且灵活的...

    c/c++面試精髓題

    【C/C++面试精髓题解析】 C/C++面试题往往注重对编程基础、语言特性以及问题解决能力的考察。在本文中,我们将深入探讨几个典型的面试题,通过这些题目来揭示C/C++程序员应具备的核心技能。 首先,我们来看一道...

    c/c++语言程序设计课件

    【压缩包子文件的文件名称列表】"C_Cpp课件 在 Ytlx0210 上" 暗示了课件的具体内容可能被组织在以"C_Cpp"命名的文件夹内,可能包含各个章节的资料,如"C++基础"、"C语言概述"、"指针与内存管理"、"类与对象"等。...

    C/C++程序四书五经

    - **内容亮点**:本书全面覆盖了C99、C89、传统C语言、各版本C运行库以及编写与C++兼容的C代码等知识体系,无论是初学者还是专业人士,都能从中找到所需的信息。 - **适宜读者**:适合所有阶段的C语言学习者,尤其...

    C/C++程序员实用大全代码

    2. **指针**:C/C++的核心之一,涉及指针声明、解引用、指针运算、动态内存分配与释放。 3. **函数**:如何定义、调用函数,参数传递,递归函数的应用。 4. **数组和字符串**:数组的操作,字符串处理函数,如...

    Visual C/C++ 编程精选集锦

    这份资料集锦旨在帮助开发者深入理解Visual C/C++的精髓,提升编程技能,并通过丰富的实例来巩固理论知识。 在Visual C/C++编程中,关键技术涵盖了许多方面: 1. **MFC(Microsoft Foundation Classes)框架**:...

    C/C++中文函数手册

    《C/C++中文函数手册》是一份非常实用的编程资源,专为C和C++开发者设计,提供了详尽的函数库信息和速查指南。这份手册涵盖了C语言库函数和C++ API,对于初学者和有经验的程序员来说都是一个宝贵的参考资料。 C语言...

    C/C++笔试题库 (整理版)

    通过本资源库,读者可以深入理解C/C++语言的精髓,掌握编程基础知识,提高编程能力。 1. 基本概念:理解 const char*, char const*, char*const 的区别 C++语言中,const关键字的使用可以有多种形式,例如const ...

    C语言/C++语言参考

    3. **指针**:C语言的精髓之一,通过指针可以访问和操作内存地址,实现灵活的数据操作。 4. **函数**:模块化的代码组织方式,支持函数递归和函数指针。 5. **预处理器**:提供宏定义和条件编译等功能,增强了代码的...

    2022年C语言/C++学习笔记~ C++资源

    总的来说,C语言和C++的学习涵盖了从基础语法到高级特性的广泛内容,通过不断的实践和探索,可以深入理解这两种语言的精髓,为后续的软件开发工作打下坚实基础。对于想要进入IT行业的初学者来说,掌握C/C++意味着...

    c/c++各类有趣程序的集合

    在C/C++编程世界中,有趣的程序集合是一个充满探索与创新的领域,它不仅涵盖了基础的编程技巧,还包括了各种数学、人文和历史问题的解决方法。这些程序可以帮助开发者提升解决问题的能力,同时增加编程的乐趣。下面...

    C/C++完美演绎-源代码

    - **指针**:C语言的精髓之一,通过指针可以实现灵活的数据操作和内存管理。 - **结构体与联合体**:结构体允许我们组合多种类型的数据,联合体则可以在同一内存位置存储不同类型的变量。 - **预处理器宏**:提供...

    (c/c++)让你不再害怕指针

    在C/C++编程语言中,指针是至关重要的一个概念,它被许多初学者视为难点。但通过深入理解和实践,我们可以克服对指针的恐惧,甚至掌握其精髓,让编程变得更加得心应手。本文将详细阐述指针的定义、类型、操作以及其...

    C/C++高级编程pdf

    《C/C++高级编程》是深入探讨这两种编程语言精髓的重要资料,主要针对已经掌握C/C++基础的开发者,旨在提升其在编程领域的专业技能。在这个领域,类的构造与指针的使用是核心且复杂的主题,它们是理解和利用C/C++...

    c/c++ 深层探索

    1. **指针操作**:C语言的精髓在于指针,理解和熟练使用指针是掌握C语言的关键。这涉及到指针的声明、赋值、解引用以及指针与数组、函数之间的交互。 2. **内存管理**:C语言允许程序员直接管理内存,包括动态分配...

    指针(pointer)——C-C++的精髓

    ### 指针(pointer)——C/C++的精髓 #### 概述 指针是C/C++编程语言中一个非常核心且强大的特性。通过指针,程序员能够直接操作内存地址,实现对数据的有效管理和访问。指针的概念对于理解C/C++语言至关重要,尤其在...

Global site tag (gtag.js) - Google Analytics