指针是其值等于一个内存地址的一个变量。它“指向”内存中的一个位置。可以通过在声明中,在变量名前面放置一个*,将一个变量声明为一个指针变量。如下的代码把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 编程中错误地使用指针, 可能会比其他错误原因引发更多的程序崩溃。
分享到:
相关推荐
字符串注意点:1.只要说明了是字符串,说明该字符串末尾一定有一个结束字符'\0' 2.利用strlen 计算长度时,不算上 结束字符的长度。所以实际长度:实际字符个数+1。 3.定义的时候可以不用写明长度:char string[]=...
C语言右左法则----复杂指针解析 因为C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既着名又常用的方法。不过,右左法 则其实并不是C标准里面的内容,它是从C标准...
C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明...
书中以具体的实例为线索,特别注重对例题的分析、对知识点的归纳、对求解方法的引申,同时程序代码中融会了C语言的各种编程技巧,条理清晰,以方便读者举一反三,开发出符合特定要求的程序。本书的配套光盘中涵盖了...
关于c语言指针问题,推荐给大家,讲的挺细致的,不错。
本文系统的介绍了c语言的核心-指针、并对指针的各种用法进行了归纳、对于使用c编程的程序员来说是必看的、相信看文本文会对指针有一个更加深刻的认识、尤其是对于初学者、指针是一个比较难理解的概念、只有深刻理解...
C语言超强的指针学习笔记 C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是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语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明...
C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标 准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的...
C语言和C的指针学习总结[归纳].pdf
利用C语言的函数指针实现宏命令[归纳].pdf
归纳起来C语言具有下列特点: 1. C是中级语言 它把高级语言的基本结构和语句与低级语言的实用性结合起来。C语言可以象汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。 2. C是结构式语言 ...
C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左 法则其实并不是C标 准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的...
涉及的主要内容包括:变量的作用域和存储类别、函数、数组、字符串、指针、文件、链表等。一些最基本的概念在此就不多作解释了,仅希望能有只言片语给同是C语言初学者的学习和上机过程提供一点点的帮助。
无头节点单链表的实现可是说是对C语言指针一个最直接、最贴合实际、也是最具有归纳性的程序设计应用。许多C语言基础面试题都涉及单链表的实现和构造,其目的就是考察面试者对C语言基础数据类型是否有足够的了解,对...
根据C语言的发展和计算机教学的需要,作者在《C程序设计(第三版)》的基础上进行了修订。本书按照C语言的新标准C 99进行介绍,所有程序都符合C 99的规定,使编写程序更加规范;对C语言和程序设计的基本概念和要点讲解...