C语言指针是很容易学习和。某些C语言编程任务的指针进行更容易和其它任务,如动态存储器分配,不能离开使用指针来执行。所以有必要学习指针成为一个完善的C程序员。让我们开始学习指针的简单和容易的步骤。
每一个变量是一个内存地址位置,每个存储单元都有其定义的地址,可以用符号(&)运算符,它表示一个内存地址进行访问。考虑下面的例子,这将打印中定义的变量的地址。
#include <stdio.h> int main () { int var1; char var2[10]; printf("Address of var1 variable: %x ", &var1 ); printf("Address of var2 variable: %x ", &var2 ); return 0; }
当上述代码被编译和执行时,它会产生一些输出如下:
Address of var1 variable: bff5a400 Address of var2 variable: bff5a3f6
所以,明白了什么是内存地址以及如何访问它,所以这个概念的基础上。现在,让我们来看看什么是指针。
什么是指针?
指针是一个变量,其值是另一个变量的地址,所述存储器位置,即,直接地址。像任何变量或常量,必须声明指针之前,你可以用它来存储任何变量的地址。一个指针变量声明的一般形式是:
type *var-name;
在这里,指针类型为基本类型;它必须是一个有效的C语言数据类型,var-name是指针变量的名称。 星号*用来声明指针。然而,在语句中的星号被用来指定一个变量作为一个指针。以下是有效的指针声明:
int *ip; /* yiibaier to an integer */ double *dp; /* yiibaier to a double */ float *fp; /* yiibaier to a float */ char *ch /* yiibaier to a character */
所有的指针的值的实际数据的类型可以是整数,浮点数,字符,或以其他方式,代表存储器地址的长十六进制数。不同数据类型的指针之间的唯一区别是变量的数据类型或常数的指针指向。
如何使用指针?
有一些重要的操作,使用指针的帮助。 (a)定义一个指针变量(b)分配一个变量的指针(c)地址终于在指针变量的可用地址来访问的值。这是通过使用一元运算符*返回位于其操作数所指定的地址的变量的值完成。下面的例子利用这些操作:
#include <stdio.h> int main () { int var = 20; /* actual variable declaration */ int *ip; /* yiibaier variable declaration */ ip = &var; /* store address of var in yiibaier variable*/ printf("Address of var variable: %x ", &var ); /* address stored in yiibaier variable */ printf("Address stored in ip variable: %x ", ip ); /* access the value using the yiibaier */ printf("Value of *ip variable: %d ", *ip ); return 0; }
当上述代码被编译和执行时,它会产生一些输出如下:
Address of var variable: bffd8b3c Address stored in ip variable: bffd8b3c Value of *ip variable: 20
C语言 NULL指针
它始终是一个很好的做法,以一个NULL值赋给如果没有确切的地址将被分配一个指针变量。这样做是在变量声明时分配NULL指针被称为空指针。
NULL指针是一个常数为零在几个标准库中定义的值。考虑下面的程序:
#include <stdio.h> int main () { int *ptr = NULL; printf("The value of ptr is : %x ", ptr ); return 0; }
当上述代码被编译和执行时,它产生了以下结果:
The value of ptr is 0
在大多数操作系统中,程序不允许在地址0来访问存储器,因为该存储器是由操作系统保留。然而,存储器地址0具有特别重要的意义;它表明,该指针不指向一个访问的存储器位置。但按照惯例,如果一个指针包含空(null/零)值,则假定为不指向什么。
要检查一个空指针,可以使用if语句如下:
if(ptr) /* succeeds if p is not null */ if(!ptr) /* succeeds if p is null */
C语言指针详述:
指针有很多概念,它们对C语言编程非常重要。有以下几个重要指针概念,一个C程序员应该明确:
概念 | 描述 |
---|---|
C语言指针运算 | 有迹象表明,可以对指针使用四则运算符:++, --, +, - |
C语言指针数组 | 可以定义数组持有一些指针 |
C语言指针的指针 | C语言允许指针的指针 |
C语言传递函数指针 | 通过引用或地址传递参数均使传递的参数将在调用函数被调用函数变化 |
C语言从函数返回指针 | C语言允许函数返回一个指向局部变量,静态变量和动态分配的存储器 |