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位。

