首页 > 编程笔记

C语言指针是什么?

指针就是内存地址,使用指针访问变量,就是直接对内存地址中的数据进行操作。合理地使用指针,可以提高程序运行的速度,实现实参与形参数据的双向传递,增强操作的灵活性。本节将介绍C语言中特有的功能强大的数据类型——指针。

C语言指针概述

访问内存中的数据有两种方式——直接访问和间接访问。
指针是C语言的精髓,要想掌握C语言就需要深入地了解指针。

C语言指针类型的变量和定义

从语法的角度看,只要把指针变量声明语句里的指针变量名去掉,剩下的部分就是这个指针变量的类型。

下面是一些指针类型变量的定义:
int *ptr; //变量ptr的类型是int *
float *ptr;//变量ptr的类型是float *
char *ptr; //变量ptr的类型是char *
struct stu
{   
    char no[8];
    char name[10];
    float eng;
}*ptr;   //变量ptr的类型是struct stu *
以上 4 个变量 ptr 被定义成不同类型的指针变量,指针变量 ptr 的类型实际上就是它所指向的另一个数据的类型,而这个数据往往存储在一个变量中,一旦 ptr 指向了这个变量,以后就可以通过 ptr 间接访问这个变量了。

C语言指针所指向变量的类型

通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当作什么来看待。

在指针的算术运算中,指针所指向的类型有很大的作用。

指针的类型(即指针本身的类型)和指针所指向的类型是两个概念。对C语言越来越熟悉时会发现,把指针“类型”这个概念分成“指针的类型”和“指针所指向的类型”两个概念,是精通指针的关键点之一。

C语言指针的值

指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在 32 位程序里,所有类型指针的值都是一个 32 位整数,因为 32 位程序里内存地址全都是 32 位的。

指针所指向的内存区是从指针的值所代表的那个内存地址开始的,长度为 sizeof(指针所指向的类型)的一片内存区。以后,我们说一个指针的值是 XX,就相当于说该指针指向了以 XX 为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。

指针所指向的内存区和指针所指向的类型是两个完全不同的概念。如果指针所指向的类型已经有了,但由于指针还未初始化,那么它所指向的内存区是不存在的,或者说是无意义的。

以后,每遇到一个指针,都应该问问:这个指针的类型是什么?指针指向的类型是什么?该指针指向了哪里?

C语言指针所占内存

在不同的操作系统及编译环境中,指针类型占用的字节数是不同的。

指针本身占了多大的内存?对于某一个具体的环境,可以用下面的语句精确地知道指针类型占用的字节数:printf("%d\n",sizeof(int*))。

在 32 位平台里,指针本身占据了 4 个字节的长度。指针所占内存这个概念在判断一个指针表达式是否是左值时很有用。

优秀文章