C 中的指针:C 编程中的指针是什么?类型
什么是 C 中的指针?
指针 在 C 中,是一个存储另一个变量地址的变量。指针也可用于引用另一个指针函数。指针可以递增/递减,即指向下一个/上一个内存位置。指针的目的是节省内存空间,实现更快的执行时间。
如何在 C 中使用指针
如果我们声明一个int类型的变量v,v实际上会存储一个值。
v 现在等于 0。
但是,每个变量除了值之外,还有它的地址(或者,简单地说,它在内存中的位置)。可以通过在变量名前加上一个 &号来检索地址。
如果你在屏幕上打印一个变量的地址,它看起来就像一个完全随机的数字(而且,它可能会因运行而异)。
让我们用 C 示例中的指针来实践一下吧
这个程序的输出是-480613588。
现在,什么是指针?指针将存储变量的地址,而不是存储值。
指针变量
int *y =&v;
VARIABLEPOINTERA 值 存储在命名 存储/内存地址A 变量 指向 另一个的存储/内存地址 变量声明一个指针
与变量一样,C 编程中的指针必须先声明,然后才能在程序中使用。只要遵循 C 的命名规则,指针就可以任意命名。指针声明的形式如下。
data_type * pointer_variable_name;
在这里,
- 数据类型 是指针的 C 变量类型的基类型,表示指针指向的变量的类型。
- 作为间接运算符的星号(*:与乘法相同的星号)声明了一个指针。
让我们看看这个 C 指针教程中的一些有效指针声明:
int *ptr_thing; /* pointer to an integer */ int *ptr1,thing;/* ptr1 is a pointer to type integer and thing is an integer variable */ double *ptr2; /* pointer to a double */ float *ptr3; /* pointer to a float */ char *ch1 ; /* pointer to a character */ float *ptr, variable;/*ptr is a pointer to type float and variable is an ordinary float variable */
初始化一个指针
声明一个指针后,我们像标准变量一样用变量地址初始化它。如果 C 编程中的指针没有未初始化并在程序中使用,结果是不可预测的,并且可能是灾难性的。
要获取变量的地址,我们使用与号 (&) 运算符,放置在我们需要其地址的变量的名称之前。指针初始化使用以下语法完成。
指针语法
pointer = &variable;
下面给出一个简单的指针说明程序:
#include <stdio.h> int main() { int a=10; //variable declaration int *p; //pointer variable declaration p=&a; //store address of variable a in pointer p printf("Address stored in a variable p is:%x\n",p); //accessing the address printf("Value stored in a variable p is:%d\n",*p); //accessing the value return 0; }
输出:
Address stored in a variable p is:60ff08 Value stored in a variable p is:10操作员 意义 *服务于 2 个目的
- 指针声明
- 返回被引用变量的值
- 返回变量的地址
C 中的指针类型
以下是不同的 C 中的指针类型 :
空指针
我们可以通过在指针声明期间分配空值来创建空指针。当您没有为指针分配任何地址时,此方法很有用。空指针始终包含值 0。
下面的程序说明了空指针的使用:
#include <stdio.h> int main() { int *p = NULL; //null pointer printf(“The value inside variable p is:\n%x”,p); return 0; }
输出:
The value inside variable p is: 0
空指针
在 C 编程中,void 指针也称为泛型指针。它没有任何标准数据类型。 void 指针是使用关键字 void 创建的。可以用来存储任意变量的地址。
以下程序说明了 void 指针的使用:
#include <stdio.h> int main() { void *p = NULL; //void pointer printf("The size of pointer is:%d\n",sizeof(p)); return 0; }
输出:
The size of pointer is:4
野指针
如果指针没有被初始化为任何东西,则称它为野指针。这些类型的 C 指针效率不高,因为它们可能指向一些未知的内存位置,这可能会导致我们的程序出现问题,并可能导致程序崩溃。使用野指针时应始终小心。
下面的程序说明了野指针的使用:
#include <stdio.h> int main() { int *p; //wild pointer printf("\n%d",*p); return 0; }
输出:
timeout: the monitored command dumped core sh: line 1: 95298 Segmentation fault timeout 10s main
'c'中其他类型的指针如下:
- 悬空指针
- 复杂指针
- 近点指针
- 远指针
- 巨大的指针
直接和间接访问指针
在 C 中,有两种等效的方式来访问和操作变量内容
- 直接访问:我们直接使用变量名
- 间接访问:我们使用指向变量的指针
让我们借助下面的程序来理解这一点
#include <stdio.h> /* Declare and initialize an int variable */ int var = 1; /* Declare a pointer to int */ int *ptr; int main( void ) { /* Initialize ptr to point to var */ ptr = &var; /* Access var directly and indirectly */ printf("\nDirect access, var = %d", var); printf("\nIndirect access, var = %d", *ptr); /* Display the address of var two ways */ printf("\n\nThe address of var = %d", &var); printf("\nThe address of var = %d\n", ptr); /*change the content of var through the pointer*/ *ptr=48; printf("\nIndirect access, var = %d", *ptr); return 0;}
编译程序没有任何错误后,结果是:
Direct access, var = 1 Indirect access, var = 1 The address of var = 4202496 The address of var = 4202496 Indirect access, var = 48
C 中的指针算法
指针操作总结如下图
C语言