C中的指针简单易学.使用指针可以更轻松地执行某些C编程任务,而不使用指针就无法执行其他任务(如动态内存分配).所以有必要学习指向成为一个完美的C程序员.让我们从简单而简单的步骤开始学习它们.
如您所知,每个变量都是一个内存位置,每个内存位置都定义了地址,可以使用&符号(&)运算符访问,表示内存中的地址.考虑下面的例子,它打印定义和减去的变量的地址;
#includeint 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: bff5a400Address 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)最后访问该值在指针变量中可用的地址.这是通过使用一元运算符 * 来完成的,该运算符返回位于其操作数指定的地址处的变量的值.以下示例使用这些操作 :
#includeint 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: bffd8b3cAddress stored in ip variable: bffd8b3cValue of *ip variable: 20
NULL指针
如果没有要分配的确切地址,最好为指针变量分配NULL值.这是在变量声明时完成的.指定为NULL的指针称为 null 指针.
NULL指针是一个常量,在几个标准库中定义了零值.考虑以下程序 :
#includeint main () { int *ptr = NULL; printf("The value of ptr is : %x\n", 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程序员都应该清楚以下重要的指针概念 :
Sr.No. | 概念&说明 |
---|---|
1 | Pointer算法 指针中有四个算术运算符:++, - ,+, - |
2 | 指针数组 您可以定义数组来保存多个指针. |
3 | 指向指针的指针 C允许指针指针等等. |
4 | 传递指向C |
5 | 返回C中函数的指针 C允许函数返回指向局部变量的指针,静态变量,以及动态分配的内存. |