`
canofy
  • 浏览: 819177 次
  • 性别: 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和C++语言编程中最重要的概念之一,也是最容易产生困惑并导致程序出错的问题之一。利用指针编程可以表示各种数据结构, 通过指针可使用主调函数和被调函数之间共享变量或数据结构,便于实现双向数据通讯;并能...

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

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

    零基础学习C/C++需要注意的地方

    其实就本人认为C/C++并非是“difficult(困难)”的,只要你能理清思路,掌握它的精髓,配合一套教材。那么学C/C++是一件非常容易且又其乐无穷的事。今天本人就与大家一起谈谈如何学习C/C++或者说学习C/C++应从哪几...

    C语言指针及答案

    C语言的精髓-指针,多做训练才能避免泄露,看吧!

    指针(pointer)——C_C++的精髓.docx

    指针(pointer)——C_C++的精髓.docx

    C++指针精髓

    指针你搞懂了吗?C的核心所在,C++的必修课。如果你只会使用诸如char* p=xxx的语句;那么你应该好好的看一下这篇文档了。

    ASP课程设计网络编程

    本文详细讲述了ASP网页的制作,并详细讲述了C#语言的编程规则与特点。如C#语言的简洁的语法。(吸收C/C++、VB的特性)。 体现面向对象设计思想。...灵活性与兼用型(依然提供了类似C/C++对于指针特性的支持)。

    C语言嵌入式系统编程修炼(内存操作)

    在嵌入式系统的编程中,常常要求在特定的内存单元读写内容,汇编有对应的MOV指令,而除C/C++以外的其它编程语言基本没有直接访问绝对地址的能力。在嵌入式系统的实际调试中,多借助C语言指针所具有的对绝对地址单元...

    标准C语言基础教程第四版

    通过大量的实例和练习,本书系统介绍了C语言编程中涉及的输入输出、条件选择、循环、函数、数组、字符串、数据类型、宏、指针、动态数据结构、库函数等基本内容,使读者在学习之后就能很快掌握C语言编程的精髓。...

    C#精髓 GridView

    C#相对于C和C++来说是一次革命,尽管它们之间仍然存在许多相似性。在本书中,作为第一个C#大学课程的创建者,作者通过大量示例代码为你一步步讲解C#语言。本书视角独特,适合开发者需求。作者首先介绍了C#语言的关键...

    C语言精典版本C程序设计语言

    在1983年,美国国家标准协会(ANSI)成立了一个委员会,它的目标是产生“一个无二义性的、独立于机器的C语言的定义”,同时仍保持其精髓。其结果就是C的ANSI标准。此标准规范了一些在本书第1版中提示过但没有描述的...

    c++ 虚函数与纯虚函数的区别(深入分析)

    那么,什么是虚函数呢,我们先来看看微软的解释: 虚函数是指一个类中你希望重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际调用的是继承类的版本。

    vc源代码合集0951.rar

    2012-06-12 12:23 3,250,257 C语言精髓例子.rar 2012-06-12 11:41 334,336 C语言编程规范-1.0.doc 2012-06-12 12:52 1,960 ddos源代码_c语言实现 VC6.rar 2012-06-12 12:11 366,777 DeviceTree.rar 2012-06-12 12:53...

Global site tag (gtag.js) - Google Analytics