C-指针

时间:2020-02-23 14:32:00  来源:igfitidea点击:

在本教程中,我们将学习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 = &num;
  
  //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位。