`
java-mans
  • 浏览: 11414842 次
文章分类
社区版块
存档分类
最新评论

C语言基础归纳 ---指针

 
阅读更多



指针是其值等于一个内存地址的一个变量。它“指向”内存中的一个位置。可以通过在声明中,在变量名前面放置一个*,将一个变量声明为一个指针变量。如下的代码把pPointerInt声明为指向内存中保存一个整数的变量:

int *pPointInt;


一元运算符&(“取址”运算符)用来获取一个变量的地址,以便将其存储到一个指针变量中。如下的代码将指针变量b的值设置为整数变量a的地址:

int a = 9;

int *b;

b=&a;

代码解释:

第一行将a声明为一个int变量,编译器拿出4个字节来存储a,并且将其初始化为9。

第二行将b声明为一个指向int的指针。

第三行使用取址运算符&来获取a的地址,然后将a的地址赋值给b。

假设编译器分配的起始地址为1048880,那么代码的过程如下图:



一元运算符*(叫做“求值”或“解引用”运算符),通过使用指向一个内存位置的指针变量,老设置或者获取内存位置的内存。可以这样看,把表达式*pPointInt看作是一个别名,即针对存储在pPointInt的内容中的任何内存位置的另一个名称。表达式*pPointInt可以用来设置或者获取该内存位置的内容。


在如下的代码中,将b设置为a的地址,因此,*b变成了a的别名:


int a;

int c;

int *b;

a = 9;

b = &a;

c = *b;

*b = 10;


指针在 C 中用来引用动态分配的内存。指针也用来避免将大块的内存,

例如数组和结构(将在本章稍后介绍),从一个程序的一部分复制到另一部分。例如,可以 把指向结构的一个指针传递给函数,而不是把一个较大的结构传递给函数。函数随后使用指 针来访问结构。随后我们还会看到,Objective-C 对象也总是通过指针来引用。

通用指针

声明为 void 的指针变量,是一个通用指针。

1. void *genericPointer;

可以将通用指针设置为任何变量类型的地址:

1. inta=9;

2. void *genericPointer; 3. genericPointer = &a;

然而,试图从一个通用指针获取一个值,将导致一个错误发生,因为编译器没办法知道 如何解释通用指针所表示的地址的字节:

1. inta=9;

2. int b;

3. void *genericPointer;

4. genericPointer = &a;

5. b = *genericPointer; // WRONG - won't compile

要通过 void*指针获取一个值,必须将其转换为指向一个已知类型的指针:

1. inta=9;

2. int b;

3. void *genericPointer;

4. genericPointer = &a;

5. b = *((int*) genericPointer) ; // OK - b is now 9



强制转换运算符(int*)迫使编译器将 genericPointer 看做是指向一个整数的指针 。

C 不会检查一个指针变量是否指向内存的一个有效区域。在 C 编程中错误地使用指针, 可能会比其他错误原因引发更多的程序崩溃。

分享到:
评论

相关推荐

    C语言基础 --指针运算(归纳)1.pdf

    字符串注意点:1.只要说明了是字符串,说明该字符串末尾一定有一个结束字符'\0' 2.利用strlen 计算长度时,不算上 结束字符的长度。所以实际长度:实际字符个数+1。 3.定义的时候可以不用写明长度:char string[]=...

    C语言右左法则----复杂指针解析

    C语言右左法则----复杂指针解析 因为C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既着名又常用的方法。不过,右左法  则其实并不是C标准里面的内容,它是从C标准...

    C语言指针学习笔记

    C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明...

    c语言实例解析(第二版)高清pdf电子书

    书中以具体的实例为线索,特别注重对例题的分析、对知识点的归纳、对求解方法的引申,同时程序代码中融会了C语言的各种编程技巧,条理清晰,以方便读者举一反三,开发出符合特定要求的程序。本书的配套光盘中涵盖了...

    c语言指针归纳

    关于c语言指针问题,推荐给大家,讲的挺细致的,不错。

    c语言指针详解和用法

    本文系统的介绍了c语言的核心-指针、并对指针的各种用法进行了归纳、对于使用c编程的程序员来说是必看的、相信看文本文会对指针有一个更加深刻的认识、尤其是对于初学者、指针是一个比较难理解的概念、只有深刻理解...

    C语言超强的指针学习笔记

    C语言超强的指针学习笔记 C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标 准里面的内容,它是从C标准的声明规定中...

    c指针系统归纳ppt pdf

    c语言指针系统归纳指针用法!让初学者更好的学习指针--c语言的精华!

    C语言基本语法归纳

    C语言基本语法归纳及实例介绍 C语言概况 C程序的结构 数据类型、运算符与表达式 最简单的C程序设计—顺序程序设计 选择结构程序设计 循环控制 数组 函数 指针

    程序设计抽象思想:C语言描述-

     7.6 数学归纳法  7.7 小结  7.8 复习题  7.9 编程练习  第Ⅲ部分 数据抽象  第8章 抽象数据类型  ……  第9章 效率与ADT  第10章 线性结构  第11章 符号表  第Ⅳ部分 递归数据  第12章 递归链表  第13...

    C语言_指针_教学之思考[归纳].pdf

    C语言_指针_教学之思考[归纳].pdf

    C语言所有复杂的指针声明

    C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明...

    c语言强悍指针学习笔记

    C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标 准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的...

    C语言和C的指针学习总结[归纳].pdf

    C语言和C的指针学习总结[归纳].pdf

    利用C语言的函数指针实现宏命令[归纳].pdf

    利用C语言的函数指针实现宏命令[归纳].pdf

    c语言入门教材.txt

    归纳起来C语言具有下列特点: 1. C是中级语言 它把高级语言的基本结构和语句与低级语言的实用性结合起来。C语言可以象汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。 2. C是结构式语言 ...

    超强的指针学习笔记 C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。

    C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左 法则其实并不是C标 准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的...

    c语言的难点分析整理归纳

    涉及的主要内容包括:变量的作用域和存储类别、函数、数组、字符串、指针、文件、链表等。一些最基本的概念在此就不多作解释了,仅希望能有只言片语给同是C语言初学者的学习和上机过程提供一点点的帮助。

    无头节点的单链表

    无头节点单链表的实现可是说是对C语言指针一个最直接、最贴合实际、也是最具有归纳性的程序设计应用。许多C语言基础面试题都涉及单链表的实现和构造,其目的就是考察面试者对C语言基础数据类型是否有足够的了解,对...

    C程序设计 第四版 谭浩强 高清扫描版 带完整书签目录 加 学习辅导

    根据C语言的发展和计算机教学的需要,作者在《C程序设计(第三版)》的基础上进行了修订。本书按照C语言的新标准C 99进行介绍,所有程序都符合C 99的规定,使编写程序更加规范;对C语言和程序设计的基本概念和要点讲解...

Global site tag (gtag.js) - Google Analytics