指针的使用 指针是 C 语言编程中的一种特殊变量,它存储的数值被解释成内存里的一个地址。要搞清一个指针需要搞清四方面的内容:指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。 1. 指针的类型 指针的类型是指针本身所具有的类型。可以通过指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。例如:`int *ptr;` 的类型是 `int *`,`char *ptr;` 的类型是 `char *`,`int ptr;` 的类型是 `int `,`int (*ptr)[3];` 的类型是 `int(*)[3]`,`int *(*ptr)[4];` 的类型是 `int *(*)[4]`。 2. 指针所指向的类型 指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。可以通过指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。例如:`int *ptr;` 所指向的类型是 `int`,`char *ptr;` 所指向的类型是 `char`,`int ptr;` 所指向的类型是 `int *`,`int (*ptr)[3];` 所指向的类型是 `int()[3]`,`int *(*ptr)[4];` 所指向的类型是 `int *()[4]`。 3. 指针的值或者叫指针所指向的内存区 指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在 32 位程序里,所有类型的指针的值都是一个 32 位整数,因为 32 位程序里内存地址全都是 32 位长。指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为 `sizeof(指针所指向的类型)`的一片内存区。 4. 指针本身所占据的内存区 指针本身占了多大的内存?可以用函数 `sizeof(指针的类型)` 测一下就知道了。在 32 位平台里,指针本身占据了 4 个字节的长度。指针本身占据的内存这个概念在判断一个指针表达式是否是左值时很有用。 指针的算术运算 指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的加减运算的意义是不一样的。例如: `char a[20];` `int *ptr=a;` `ptr++;` 在上例中,指针 `ptr` 的类型是 `int*`,它指向的类型是 `int`,它被初始化为指向整形变量 `a`。接下来的第 3 句中,指针 `ptr` 被加了 1,编译器是这样处理的:它把指针 `ptr` 的值加上了 `sizeof(int)`,在 32 位程序中,是被加上了 4。由于地址是用字节做单位的,故 `ptr` 所指向的地址由原来的变量 `a` 的地址向高地址方向增加了 4 个字节。由于 `char` 类型的长度是一个字节,所以,原来 `ptr` 是指向数组 `a` 的第 0 号单元开始的四个字节,此时指向了数组 `a` 中从第 4 号单元开始的四个字节。 可以用一个指针和一个循环来遍历一个数组,看例子: `int array[20];` `int *ptr=array;` `...` `for(i=0;i<20;i++)` `{` `(*ptr)++;` `ptr++;` `}` 这个例子将整型数组中各个单元的值加 1。
剩余8页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助