C - 指针
C 语言中的指针学习起来既简单又有趣。使用指针可以更轻松地执行某些 C 编程任务,而不使用指针则无法执行其他任务,例如动态内存分配。所以学习指针成为一个完美的C程序员就变得很有必要了。让我们通过简单易行的步骤开始学习它们。
如您所知,每个变量都是一个内存位置,每个内存位置都定义了它的地址,可以使用 &运算符访问它,它表示内存中的一个地址。考虑以下示例,它打印定义的变量的地址 -
现场演示#include <stdio.h> 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;
在这里,输入 是指针的基类型;它必须是有效的 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 <stdio.h> 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 指针。
NULL 指针是一个常量,在几个标准库中定义为零值。考虑以下程序 -
现场演示#include <stdio.h> 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. | 概念与描述 |
---|---|
1 | 指针运算 指针中可以使用四种算术运算符:++、--、+、- |
2 | 指针数组 您可以定义数组来保存多个指针。 |
3 | 指向指针的指针 C 允许你在一个指针上有一个指针等等。 |
4 | 将指针传递给 C 中的函数 通过引用或地址传递参数可以使被调用函数在调用函数中更改传递的参数。 |
5 | 从 C 中的函数返回指针 C 允许函数返回指向局部变量、静态变量和动态分配内存的指针。 |
C语言