C-指针
在本教程中,我们将学习C编程语言中的Pointers。
我们知道在C语言中,如果我们想保存一些值,我们会使用变量。
因此,变量存储一些值,我们通过写变量名称来访问该值。
在下面的示例中,我们将整数值存储在变量" num"中,并且要访问该值,我们正在编写变量的名称。
//assign value to variable int num = 10; //access value stored in the variable printf("%d", num);
当我们创建一个变量并为其分配一个值时,会发生三件事。
一个内存位置被分配给该变量。
分配给变量的值存储在该分配的存储位置中。
分配的内存位置由变量名称引用。
什么是指针?
指针是派生的数据类型,它们存储内存地址。
因此,指针是存储内存地址的变量,这些地址是其他变量的内存位置。
创建指针变量
在使用指针变量之前,我们首先必须像C编程中的任何其他变量一样创建或者声明它们。
指针变量声明的语法如下。
dataType *pointerVar;
在上面的语法中,星号*表示我们正在创建一个指针变量。
上面语法中的指针变量的名称为pointerVar
。
创建的指针变量" pointerVar"将指向类型为" dataType"的变量。
例
在下面的示例中,我们将创建一个整数指针变量,该变量将指向类型为int的变量。
int *ptr;
同样,我们可以创建一个字符指针变量,该变量将指向" char"类型的变量。
char *ptr;
获取地址运算符 &
我们使用&运算符的地址来获取变量的地址。
在下面的语法中,我们将获取变量" varName"的地址。
&varName
运算符* 地址处的值
我们使用"*"运算符地址处的值来获取存储在变量的任何给定地址处的值。
在以下语法中,我们将获取存储在给定地址中的值。
*varName
例
在给定的示例中,我们将打印变量" num"的地址和存储在变量" num"的地址中的值。
#include <stdio.h> int main(void) { //creating variable num int num; //assigning value to num num = 10; //printing the value stored in variable num printf("Value in num: %d\n", num); //printing the address of the variable num printf("Address of num: %ld\n", &num); //printing the value stored at the address of the variable num printf("Value at the address of num: %d\n", *(&num)); return 0; }
注意!在上面的代码中,"&num"为我们提供了变量" num"的地址,而" *(&num)"为我们提供了存储在变量" num"的地址中的值。
Value in num: 10 Address of num: 140732733818936 Value at the address of num: 10
指针变量中的垃圾值
默认情况下,当我们声明一个指针变量时,它会被一个随机值(也就是垃圾值)初始化。
在以下示例中,我们创建了一个类型为int
的指针变量。
由于我们尚未分配任何" int"类型变量的地址,因此它具有一些垃圾值。
#include <stdio.h> int main(void) { //pointer variable of type int int *ptr; //by default pointer variable ptr //holds garbage value as no //int variable address was assigned printf("Value stored in ptr: %ld\n", ptr); return 0; }
Value stored in ptr: 140732859951192
我们通常将指针变量初始化为NULL值,以避免随机垃圾值。
#include <stdio.h> int main(void) { //pointer variable of type int int *ptr = NULL; printf("Value stored in ptr: %ld\n", ptr); return 0; }
Value stored in ptr: 0
用地址初始化指针变量
为了用另一个变量的地址初始化指针变量,我们使用运算符的地址"&"。
在下面的示例中,我们有一个整数变量" num",其值为10。
我们还有一个" ptr"指针变量,该变量保存整数变量" num"的值。
因此,ptr变量指向num变量。
#include <stdio.h> int main(void) { //num variable int num = 10; //pointer variable int *ptr; //assign address of num variable to ptr pointer variable ptr = # //print the value stored in num using the num variable printf("Value stored in num: %d\n", num); //print address of num stored in ptr variable printf("Address of num variable: %ld\n", ptr); //print address of ptr variable printf("Address of ptr variable: %ld\n", &ptr); //print the value stored in num using ptr variable printf("Value stored in num using ptr variable: %d\n", *ptr); return 0; }
Value stored in num: 10 Address of num variable: 140732844468280 Address of ptr variable: 140732844468272 Value stored in num using ptr variable: 10
在上图中,我们仅显示地址的后4位。