下载此文档

C和指针学习笔记(上).doc


文档分类:IT计算机 | 页数:约16页 举报非法文档有奖
1/16
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/16 下载此文档
文档列表 文档介绍
第一章指针?内存和变量:内存中的每个位置由一个独一无二的地址标识,并且内存中每个位置都包含一个值。高级语言所提供的特性之一就是通过名字而不是地址来访问内存的位置。这些名字就是我们所称的变量。?值和类型:不能简单地通过检查一个值的位来判断它的类型,值得类型并非值本身所固有的一种特性,而是取决于它的使用方式。?指针变量的内容:指针的初始化是用&操作符完成的,它用于产生操作数的内存地址。例如: int a=112 ; int *b=&a ; 说明: b的值应该是操作数 a所在的地址。?间接访问操作符:通过一个指针访问它所指向的地址的过程称为间接访问或解引用指针。例如: int *b=&a ; 说明: *b为操作数 a所在地址中的值, *是用于执行间接访问的单目操作符。?末初始化和非法的指针例如非法操作: int*a; …*a=12 ; 说明:究竟 a 指向哪里?我们声明了这个变量,但从未对它进行初始化,所以我们没有办法预测 12这个值将储存于什么地方。? NULL 指针: 标准定义了 NULL 指针,它作为一个特殊的指针变量,表示不指向任何东西。从定义上看, NULL 指针并未指向任何东西。因此,对一个 NULL 指针进行解引用操作是非法的。在对指针进行解引用操作之前,你首先必须确保它并非 NULL 指针。?指针,间接访问和左值: 指针变量可以作为左值,并不是因为它们是指针,而是因为它们是变量。间接访问指定了一个特定的内存位置,这样我们可以把间接访问表达式的结果作为使用。?指针,间接访问和变量例如: *&a=25 ; 说明:首先, &操作符产生变量 a的地址,它是一个指针变量。接着, *操作符访问其操作数所表示的地址。所以 a的值为 25。?指针常量例如: *100=25 ; 说明:这条语句是非法的,因为字面值 100 的类型是整型,而间接访问操作只能作用于指针类型表达式。所以可以改成如下语句。例如: *(int *)100=25; 说明:这个技巧唯一有用之处是你偶尔通过地址访问内存中某个特定的位置,它并不是用于访问某个变量,而是访问硬件本身。?指针的指针例如: int a=12; int *b=&a; int **c=&b; 说明:变量 b是一个“指向整型的指针”,所以 c是指向“指向整型的指针”的指针。如上图所示。表1双重间接访问表达式相当的表达式 a12 b &a *b a,12 c &b *c b,&a **c *b,a,12 ?实例 1. 计算一个字符串的长度#include<> size_t strlen(char *string) { int length=0; while(*string++!= ’\0’) length+=1; return length; } 12 abc 2. 在一组字符串中查找#include<> #define TURE 1 #define FALSE 0 int find_char(char **strings ,char value) { char *string; while((string=*strings++)!=NULL) { while ((*string!= ’\0’)){ if(*string++=value) return TURE; }} return FALSE; }}?指针运算: 指针加上一个整数的结果是另一个指针。问题是,它指向哪里?如果你将字符指针加 1 ,运算结果产生的指针指向内存中的下一个字符。当一个指针和一个整数量执行算数运算前始终会根据合适的大小进行调整。这个“合适的大小”就是指针所指向类型的大小。例如: float 占据 4 个字节,在计算 float 型指针加 3 的表达式时,这个 3 将根据 float 类型的大小(此例中为 4)进行调整(相乘)。这样,实际加到指针上的整型值为 12。 C 的指针算数运算只限于两种形式: ± 整数: 标准定义这种形式只能用于指向数组中某个元素指针。 2. 指针—指针: 只有当两个指针都指向同一个数组中的元素时,才允许从一个指针减去另一个指针。指针减法运算的值是两个指针在内存中的距离(以数组元素的长度为单位, 而不是以字节为单位),因为减法运算的结果将除以数组元素类型的长度。 C 的关系运算: 用下列关系操作符对两个指针值进行比较是可能的: <, <=, >, >= 不过前提是它们都指向同一个数组中的元素。例 1: #define N_VALUES 5 float values[N_VALUES]; float *vp; for(vp=& values[0];vp< values[N_VALUES];) *vp++=0; 说明:这个测试是合法的,因为 vp和指针常量都指向同一数

C和指针学习笔记(上) 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数16
  • 收藏数0 收藏
  • 顶次数0
  • 上传人63229029
  • 文件大小99 KB
  • 时间2017-01-16