C-指针链接

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

在本教程中,我们将学习使用C编程语言链接指针变量。

在上一教程"指针和变量"中,我们学习了如何使用指针变量来操作存储在变量中的数据。

现在,我们将链接更多的指针变量以操纵其他变量。

注意!随着链接更多的指针,复杂性增加。

创建一个整数变量

我们将从创建一个整数变量" num"开始,并为其分配值10。

int num = 10;

因此,编写以上代码会发生三件事。

  • 分配了一个内存位置来存储整数变量。

  • 值10存储在存储位置中。

  • 内存位置由变量名num引用。

在上图中显示,整数变量num获取内存位置8280,并且在该位置存储了值10。

为整数变量创建整数指针变量

现在我们将创建一个整数指针变量" ptr",它将指向整数变量" num"。

为此,我们必须将num变量的地址保存在ptr变量中。

要获取变量的地址,我们使用&运算符的地址。

//integer variable num
int num = 10;

//pointer variable pointing at num
int *ptr = #

在上图中显示,整数指针变量" ptr"获得了内存位置8272,在该位置存储了" num"变量的地址,即8280。
因此,ptr变量指向num变量。

为第一个整数指针变量创建第二个整数指针变量

要创建第二个指针变量以指向第一个指针变量,我们使用以下语法。

dataType **secondPtr = &firstPtr;

在下面的示例中,我们将创建第二个整数指针变量" ptr2",该变量指向第一个整数指针变量" ptr",后者指向整数变量" num"。

int **ptr2 = &ptr;

在上面的图像中,示出了第二整数指针变量" ptr2"获得了存储位置8264,并且在该位置中存储了第一指针变量" ptr"的地址,即8272。
因此,ptr2变量指向ptr变量。

通过第二个整数指针变量更新整数变量的值

为此,我们必须首先获取变量" num"的地址,该地址存储在整数指针变量" ptr"中。

我们使用" *"运算符地址处的值来获取存储在给定内存地址中的值。

为了获取整数变量num的地址,该地址作为值存储在整数指针变量ptr中,我们必须编写以下内容。

*ptr

为了获得整数指针变量" ptr"的地址,该地址作为值存储在整数指针变量" ptr2"中,我们必须编写以下内容。

*(*ptr2)

因此,* ptr2指向ptr* ptr指向num

(ptr2)给我们存储在内存地址(在本例中为8280)的值,该值分配给num变量。

因此,要通过第二个整数指针变量" ptr2"更新存储在整数变量" num"中的值,我们必须编写以下内容。

//updating the value of num via ptr2
*(*ptr2) = 20;

完整的代码

#include <stdio.h>

int main(void) {
  
  //num variable
  int num = 10;

  //ptr pointer variable
  int *ptr = NULL;
  
  //second ptr2 pointer variable
  int **ptr2 = NULL;

  //assigning the address of num to ptr
  ptr = &num;
  
  //assigning the address of ptr to ptr2
  ptr2 = &ptr;

  //printing the value of num - Output: 10
  printf("num: %d\n", num);
  printf("num via ptr: %d\n", *ptr);
  printf("num via ptr2: %d\n", *(*ptr2));
 
  //updating the value of num via ptr2
  printf("Updating value of num via ptr2...\n");
  *(*ptr2) = 20;

  //printing the new value of num - Output: 20
  printf("num: %d\n", num);
  printf("num via ptr: %d\n", *ptr);
  printf("num via ptr2: %d\n", *(*ptr2));

  return 0;
}

输出:

num: 10
num via ptr: 10
num via ptr2: 10
Updating value of num via ptr2...
num: 20
num via ptr: 20
num via ptr2: 20