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;
在这里, 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 <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程序员都应该清楚以下重要的指针概念-
No. | Concept | 描述 |
---|---|---|
1 | 指针运算 | 指针中可以使用四种算术运算符:++,-,+,- |
2 | 指针数组 | 您可以定义数组以容纳多个指针。 |
3 | 指针的指针 | C允许您将指针放在指针上,依此类推。 |
4 | 指针作为参数传递给函数 | 通过引用或地址传递参数可以使被调用函数在调用函数中更改传递的参数。 |
5 | 从函数中返回指针 | C允许函数返回指向局部变量,static 变量和动态分配的内存的指针。 |