📜  C-指针

📅  最后修改于: 2020-12-19 05:28:13             🧑  作者: Mango


C语言中的指针简单易学。使用指针可以更轻松地执行某些C编程任务,而如果不使用指针则无法执行其他任务(例如动态内存分配)。因此,有必要学习成为理想的C程序员的指针。让我们以简单轻松的步骤开始学习它们。

如您所知,每个变量都是一个内存位置,每个内存位置都定义了其地址,可以使用&运算符符(&)进行访问,该地址表示内存中的地址。考虑以下示例,该示例显示定义的变量的地址-

#include 

int main () {

   int  var1;
   char var2[10];

   printf("Address of var1 variable: %x\n", &var1  );
   printf("Address of var2 variable: %x\n", &var2  );

   return 0;
}

编译并执行上述代码后,将产生以下结果-

Address of var1 variable: bff5a400
Address of var2 variable: bff5a3f6

什么是指针?

指针是一个变量,其值是另一个变量的地址,即存储位置的直接地址。像任何变量或常量一样,您必须在使用指针存储任何变量地址之前声明一个指针。指针变量声明的一般形式是-

type *var-name;

在这里, type是指针的基本类型。它必须是有效的C数据类型,并且var-name是指针变量的名称。用于声明指针的星号*与用于乘法的星号相同。但是,在此语句中,星号用于将变量指定为指针。看看一些有效的指针声明-

int    *ip;    /* pointer to an integer */
double *dp;    /* pointer to a double */
float  *fp;    /* pointer to a float */
char   *ch     /* pointer to a character */

所有指针的值的实际数据类型(无论是整数,浮点数,字符还是其他形式)都是相同的,即表示内存地址的十六进制数字。不同数据类型的指针之间的唯一区别是指针指向的变量或常量的数据类型。

如何使用指针?

有一些重要的操作,我们将非常频繁地在指针的帮助下进行操作。 (a)我们定义了一个指针变量, (b)将变量的地址分配给了指针,并且(c)最后访问了指针变量中可用地址处的值。这是通过使用一元运算符*完成的,该运算运算符返回变量的值,该变量位于其操作数指定的地址处。以下示例利用这些操作-

#include 

int main () {

   int  var = 20;   /* actual variable declaration */
   int  *ip;        /* pointer variable declaration */

   ip = &var;  /* store address of var in pointer variable*/

   printf("Address of var variable: %x\n", &var  );

   /* address stored in pointer variable */
   printf("Address stored in ip variable: %x\n", ip );

   /* access the value using the pointer */
   printf("Value of *ip variable: %d\n", *ip );

   return 0;
}

编译并执行上述代码后,将产生以下结果-

Address of var variable: bffd8b3c
Address stored in ip variable: bffd8b3c
Value of *ip variable: 20

空指针

在没有确切地址要分配的情况下,将NULL值分配给指针变量始终是一个好习惯。这是在变量声明时完成的。分配了NULL的指针称为指针。

NULL指针是在几个标准库中定义的值为零的常量。考虑以下程序-

#include 

int main () {

   int  *ptr = NULL;

   printf("The value of ptr is : %x\n", ptr  );
 
   return 0;
}

编译并执行上述代码后,将产生以下结果-

The value of ptr is 0

在大多数操作系统中,不允许程序访问地址0处的内存,因为该内存是由操作系统保留的。但是,存储器地址0具有特殊的意义。它指示指针不旨在指向可访问的存储位置。但是按照惯例,如果指针包含空(零)值,则假定该指针不指向任何内容。

要检查空指针,可以使用“ if”语句,如下所示:

if(ptr)     /* succeeds if p is not null */
if(!ptr)    /* succeeds if p is null */

详细指针

指针有很多但很简单的概念,它们对C编程非常重要。任何C程序员都应该清楚以下重要的指针概念-

Sr.No. Concept & Description
1 Pointer arithmetic

There are four arithmetic operators that can be used in pointers: ++, –, +, –

2 Array of pointers

You can define arrays to hold a number of pointers.

3 Pointer to pointer

C allows you to have pointer on a pointer and so on.

4 Passing pointers to functions in C

Passing an argument by reference or by address enable the passed argument to be changed in the calling function by the called function.

5 Return pointer from functions in C

C allows a function to return a pointer to the local variable, static variable, and dynamically allocated memory as well.